C++调用一个返回模板类型值的函数

C++ Calling a function that returns template type value

本文关键字:类型 函数 返回 一个 调用 C++      更新时间:2024-05-09

我试图了解是否可以调用一个返回模板类型值的函数,而不在调用语句中显式指定它?

我试图调用的函数是这样的,

template <typename T>
std::unique_ptr<SomeClass<T>> createObjectInstance(InputData data) {
if(data.type_str == "abc") {
return createObjectInstanceImpl<ABC>(data);
} else if(data.type_str == "def") {
return createObjectInstanceImpl<DEF>(data);
} else {
// throw error
} 
}

调用语句

const auto objectPtr = createObjectInstance(data);
// Do something with objectPtr

这不会编译,编译器抱怨它无法推断模板参数。调用函数是否需要在每次需要时解析类型?这样做似乎很混乱。是否存在已知的设计变通方法?

不可能像您的示例那样在运行时定义函数的返回类型。

使用模板化返回值定义函数时,返回值只能是一种类型。并且该类型必须在编译时定义。

函数编译的唯一方法是将返回指针的类型设为ABCDEF的基类。但是,您将不需要模板函数来实现该目标。