[英]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.