我想编写一个函数来根据参数的值返回不同的类对象。返回类对象是模板化的。我将类名作为函数的模板参数,
template< class T >
static T FindClassObjects(int var){
if(var==1)
return T<float>(var);
else
return T<int>(var);
我可以这样做吗?
答案 0 :(得分:5)
我想编写一个函数来根据参数的值返回不同的类对象。 [...]我可以这样做吗?
简答:不。
答案很长。
C / C ++语言是强类型的;每个函数都返回一个必须在编译类型中知道的类型。
因此,不可能有一个函数返回一个依赖于运行时已知值的类型。
如果在编译时知道值var
,则会有所不同:在这种情况下,您可以开发返回不同类型的不同函数,编译时根据var
值选择要调用的函数。< / p>
无论如何,你可以用不同的方式绕过这个限制。
如果你可以使用C ++ 17,你可以返回一个std::any
,它可以包含任何类型;或者(更好的是,我想)一个std::variant
,它可以在一个带前缀的类型列表中包含一个值。
否则,如果不同的typed具有公共基类,则(通过示例)可以返回指向基类的指针。