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

标签 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);

我可以这样做吗?

最佳答案

I want to write a function to return different class objects depending on the value of a parameter. [...] Can I do this?

简短的回答:没有。

长答案。

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

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

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

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

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

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

关于C++ 函数返回类型作为模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932631/

相关文章:

c++ - 无法将 'int (*)[size]' 转换为 'int**'

c++ - 在 Eclipse CDT 中读取/写入文件的目录有问题

function - Clojure - 自动将映射条目转换为函数参数的语法糖?

python - 如何将列表转换为 Flask 模板的类对象

html - 有没有一种优雅的方法可以使用 XSLT 添加多个 HTML 类?

c++ - vector 中元素的位置

C++从一个txt文件中读取并将 "|"之前的所有内容保存在缓冲区中

c - 将 GSL 数组传递给其他函数

javascript - 将变量从一个函数传递到另一个函数

python - __iter__ 方法的主体有什么意义?