繁体   English   中英

如何在函数中返回通用值

[英]How to return a generic value in a function

我正在尝试使用vector实现通用STACK ,其中STACK可以是intdoublestring等类型

我遇到了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::optionalstd::variant

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM