所以我写了这样的话:
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;
}
}
...
};
但是我的编译器抛出错误“ ...的实例化”,并基本上告诉我返回类型不匹配(并列出了所有不匹配的类型,除了正确的类型除外),然后尝试用另一种类型实例化(用于示例double),并告诉我返回类型与int和float的向量不匹配。
我在做什么错以及如何正确编写模板函数以返回依赖于调用它的参数的不同类型。例如,当我打电话时:
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
模板参数在编译时确定。您可以通过模板专门化来完成。不要使用enum
。例如
class MyClass
{
int beautiful_integer;
double awesome_double;
std::vector<float> many_floats;
template <class T>
T getVariable();
template<>
int getVariable<int>
{
return beatiful_integer;
}
template<>
double getVariable<double>
{
return awesome_double;
}
template<>
std::vector<float> getVariable<std::vector<float>>
{
return many_floats;
}
};
从C ++ 17开始,您还可以使用Constexpr If,例如
template <class T>
T getVariable()
{
if constexpr (std::is_same_v<T, int>)
{
return beatiful_integer;
}
else if constexpr (std::is_same_v<T, double>)
{
return awesome_double;
}
else if constexpr (std::is_same_v<T, std::vector<float>>)
{
return many_floats;
}
else
{
...
}
}
然后
MyClass some_class;
int some_number = some_class.getVariable<int>();
顺便说一句:MyClass some_class();
没有按照您的期望做。看到最烦人的解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句