我想写一个函数来根据参数的值返回不同的类对象。返回的类对象是模板化的。我将类名作为函数的模板参数,
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/