所以我写了类似的东西:
class MyClass
{
enum varType {INTEGER, DOUBLE, VECTOR};
int beautiful_integer;
double awesome_double;
std::vector<float> many_floats;
template <class T>
T getVariable(varType type)
{
if(type == INTEGER)
{
return beatiful_integer;
}
if(type == DOUBLE)
{
return awesome_double;
}
if(type == VECTOR)
{
return many_floats;
}
}
...
};
但是我的编译器抛出错误“In instantiation of ...”并且基本上告诉我返回类型不匹配(并列出所有不匹配的,除了正确的)然后尝试用另一个实例化它类型(例如 double)并告诉我返回类型与 float 的 int 和 vector 不匹配。
我做错了什么以及如何正确编写模板函数以便根据调用它的参数返回不同的类型。例如当我打电话时:
MyClass some_class(); //EDIT: this should be MyClass some_class;
//thanks for pointing it out
int some_number = some_class.getVariable(INTEGER);
我想将beautiful_integer
的值赋给some_number
最佳答案
作为替代方案,使用 std:
template <class T>
const T& getVariable() const
{
return std::get<const T&>(std::tie(beautiful_integer, awesome_double, many_floats));
}
template <class T>
T& getVariable()
{
return std::get<T&>(std::tie(beautiful_integer, awesome_double, many_floats));
}
关于c++ - 对不同类型使用具有不同返回值的模板函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218490/