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

时间:2017-10-25 12:36:37

标签: c++ function class templates return-type

我想编写一个函数来根据参数的值返回不同的类对象。返回类对象是模板化的。我将类名作为函数的模板参数,

template< class T >
static T FindClassObjects(int var){
   if(var==1)
      return T<float>(var);
   else
      return T<int>(var);

我可以这样做吗?

1 个答案:

答案 0 :(得分:5)

  

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

简答:不。

答案很长。

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

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

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

无论如何,你可以用不同的方式绕过这个限制。

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

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