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