如何让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,但您可以使用早期版本中的模板特化来实现相同的目标。