簡體   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