【问题标题】:Can function templates be instantiated based on the result of runtime if else conditions without creating class templates in C++?如果没有在 C++ 中创建类模板,是否可以根据运行时的结果实例化函数模板?
【发布时间】:2022-01-17 11:13:17
【问题描述】:

如果下面是简单函数模板的定义:

template<typename T>
T compare(T a, T b)
{
   return a>b ? a : b;
}

是否可以在运行时根据某些用户输入使用不同的模板参数调用它,而不创建类模板,使用不同的T 值,例如:

char type;
cout<<"Enter type: ";
cin>>type;

if( type=='i')
{
   int x=compare<int>(3,6);
}
else if( type=='d' )
{
   double z=compare<double>(5.1,7.9);
}
..so on

【问题讨论】:

  • 你写的例子有什么问题?
  • 请使用正确的术语:类模板函数模板
  • 抱歉,这里有一些错别字,但现在更正了!
  • “不创建类模板” -- 类模板有什么帮助?
  • [OT]: T 是可演绎的,所以int x = compare(3,6);/double z = compare(5.1, 7.9); 就足够了。

标签: c++ templates


【解决方案1】:

没有。如果你想在运行时确定类型,那么你需要做你在做什么(if else)

有更高级的技术用于更高级的用途,例如将多态性与可调用表一起使用,但本质上它们做同样的事情,只是以一种更奇特的方式。

【讨论】:

  • 你的意思是继续创建类模板?
  • @leopra 没有。您可以拥有一个模板函数,也可以拥有简单的重载或具有不同名称的函数。那没关系。您仍然需要执行 if else 或等效项。
  • 所以我写的代码是对的?
  • @leopra 它编译,对吧?
  • 它编译。这也适用于参数包吗?
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多