C ++函数返回类型作为模板

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)

我可以这样做吗?

max*_*x66 6

我想编写一个函数以根据参数的值返回不同的类对象。[...]我可以这样做吗?

简短的回答:不。

长答案。

C / C ++语言是强类型的。每一个函数返回必须在编译类型已知的类型。

因此,不可能有一个函数返回一个类型,该类型依赖于运行时已知的值。

如果var在编译时知道值,则有所不同:在这种情况下,您可以开发返回不同类型的不同函数,并在编译时根据var值选择要调用的函数。

无论如何,您可以通过不同的方式绕过此限制。

如果您可以使用C ++ 17,则可以返回std::any,可以包含任何类型;或(最好是我想)一个std::variant,它可以在类型的前缀列表中包含一个值。

否则,如果不同类型具有公共基类,则您(例如)可以返回指向基类的指针。