【问题标题】:C++ Function return type as templateC++ 函数返回类型作为模板
【发布时间】:2018-04-06 13:20:26
【问题描述】:

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

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

我可以这样做吗?

【问题讨论】:

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


【解决方案1】:

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

简短回答:不。

长答案。

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

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

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

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

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

否则,如果不同类型有一个共同的基类,您(通过示例)可以返回一个指向基类的指针。

【讨论】:

  • 谢谢。我想你给了我解决方案。所有这些类都有一个共同的基类。所以我可以使用它。但问题是基类不是模板。那么我怎么知道我应该使用哪种类型来实例化。
  • @user3566905 - 欢迎来到 C++ 多态的世界!问题/建议:基类可以包含一个值,可以告诉你哪个类型是派生类?
猜你喜欢
  • 1970-01-01
  • 2022-07-22
  • 2021-03-23
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2011-03-04
相关资源
最近更新 更多