如何让C++函数返回不同类型?

看看这段代码:

#include<iostream>

enum class DataStructure{stack,queue};

template <typename T>
T foo(DataStructure ds){
  if(ds == DataStructure::stack){
    return 1;
  }
  else if(ds == DataStructure::queue){
    return 3.14F;
  }
}

int main(){
  std::cout<<foo(DataStructure::stack);
}

显然它不编译,给error: no matching function for call to ‘foo(DataStructure)’

但是你明白我想做什么,有没有办法做到这一点?基本上foo必须返回不同的对象或基本类型,具体取决于enum.

我为基本问题道歉。

回答

如果传入的枚举是编译时常量,您可以将其作为模板参数传递,并使函数相应地返回不同的类型。

#include<iostream>

enum class DataStructure{stack,queue};

template <DataStructure T>
auto foo(){
  if constexpr (T == DataStructure::stack){
    return 1;
  }
  else if constexpr (T == DataStructure::queue){
    return 3.14F;
  }
}

int main(){
  std::cout<<foo<DataStructure::stack>();
}

需要 c++17 if constexpr,但您可以使用早期版本中的模板特化来实现相同的目标。


以上是如何让C++函数返回不同类型?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>