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

7

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

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

我能做到这个吗?


1
让我们尝试谷歌搜索“C++根据参数返回不同类型”。嗯...可能是根据数据返回不同数据类型(C++)或者根据参数返回类型的重复问题。 - underscore_d
1个回答

9
我希望编写一个函数,根据参数的值返回不同的类对象。但是,简短回答是不能这样做。
长的回答是:
C/C++语言是强类型的;每个函数都必须在编译时了解其返回类型。因此,在运行时依赖于一个值的函数返回一个类型是不可能的。
如果您在编译时已知变量var的值,则可以开发返回不同类型的不同函数,并且根据变量var的值选择调用哪个函数。
无论如何,您可以以不同的方式绕过此限制。
如果您可以使用C++17,则可以返回std::any,它可以包含任何类型;或者(更好的方式)是std::variant,它可以包含预定义类型列表中的值。
否则,如果不同的类型具有公共基类,则(例如)可以返回指向基类的指针。

谢谢。我认为你给了我解决方案。所有这些类都有一个共同的基类。所以我可以使用它。但问题是基类不是一个模板。那么我怎么知道应该使用哪种类型来实例化呢? - user3566905
@user3566905 - 欢迎来到C++多态的世界!问题/建议:基类可以包含一个值,用于指示派生类的类型吗? - max66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接