首页 > 解决方案 > 如何在函数中返回泛型值

问题描述

我正在尝试STACK使用vectorwhereSTACK可以是类型intdouble来实现string泛型

我正面临着pop方法问题,我应该返回一个类型为 的值Object。如果 stack 是空的,我显然会返回,如果是 type -1,这将不起作用。有没有办法可以处理这种情况?STACKstring

#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 显然是不可行的。我怎样才能使它成为通用的空堆栈将返回一个通用的值?

标签: c++templatesstack

解决方案


我怎样才能使它成为通用的空堆栈将返回一个通用的值?

据我所知:,你不能,至少在你描述的堆栈设计中不能pop()总是返回一个值,Object并且它也必须是所有类型的通用值。那是因为没有可以将所有类型设置为的通用魔法值。

pop()您只有一些选择:如果您的堆栈为空,则抛出异常,例如

#include <stdexcept>
...
Object pop(){
    if(top == -1){
        throw std::out_of_range("pop:: Stack is empty");

pop或更改返回类似 astd::optional或的签名std::variant


推荐阅读