[英]How to return a generic value in a function
我正在嘗試使用vector
實現通用STACK
,其中STACK
可以是int
、 double
或string
等類型
我遇到了pop
方法的問題,我應該返回一個Object
類型的值。 如果堆棧為空,我顯然會返回-1
,如果STACK
的類型為string
則這將不起作用。 有什么辦法可以處理這種情況嗎?
#include <bits/stdc++.h>
using namespace std;
template <typename Object>
class Stack{
private:
int top;
int maxSize;
vector<Object> object;
public:
explicit Stack(const int size) : maxSize{size}, top{-1} {
object.reserve(maxSize);
}
Object pop(){
Object val = -1;
if(top == -1){
cout << "Stack Underflow" << endl;
return val;
} else{
val = object[top];
// object.erase(object.begin() + top);
// object[top] = 0;
--top;
return val;
}
}
};
編輯:
這里有什么更好的選擇? 從評論看來,顯然返回 -1 是不可行的。 在空堆棧將返回通用值的情況下,如何使其通用?
在空堆棧將返回通用值的情況下,如何使其通用?
據我所知:不,您不能,至少在您描述的堆棧設計中不能,其中pop()
將始終返回Object
的值,並且該值也必須是所有類型的通用值。 那是因為沒有所有類型都可以設置為的通用魔法值。
您只有一些選擇:如果您的堆棧為空,則在pop()
引發異常
#include <stdexcept>
...
Object pop(){
if(top == -1){
throw std::out_of_range("pop:: Stack is empty");
或更改pop
的簽名,返回類似std::optional
或std::variant
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.