如何在具有返回类型的函数中返回None?

Mah*_*and 1 c++

我有下面的代码:

#include<iostream>
#include <vector>
using namespace std;
template<class T>
class Stack
{
private:
    vector<T> stack;

public:
    T Pop()
    {
        if (stack.size()!=0)
        {
            T temp;
            temp=stack[stack.size()-1];
            stack.erase(stack.begin()+stack.size()-1);
            return temp;
        }
        else
                   //return nothing
                   ^^^^^^^^^^^^^^^^
                   //How i can do above by code    
    }
Run Code Online (Sandbox Code Playgroud)

在pop功能中:我想要stack.size==0; 弹出功能什么都不返回

我怎么能这样做?

Jon*_*rdy 5

这基本上是如何处理非总函数函数的问题,这些函数不一定是针对所有可能的输入定义的.有很多方法可以解决它,但它们都不是类型安全的:

  1. 有用于检索和擦除堆栈的顶部元件,很像两个单独的功能std::stack::top()std::stack::pop().

  2. 使用引用参数并返回bool指示是否返回了元素:

    bool pop(T& value) {
      if (stack.empty())
        return false;
      value = stack.back();
      stack.pop_back();
      return true;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    来电者可以写:

    T value;
    if (stack.pop(value)) {
      use(value);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 回来一个boost::optional<T>.

  4. 返回默认构造的T实例.这要求T是默认可构造的,这已经由某些std::vector成员函数强加.

  5. 抛出异常,记录违反前提条件.

  6. 保持弹出空堆栈的行为未定义.

我推荐#1,#2或#3,具体取决于偏好以及最适合周围代码的内容.