无论如何,我无需编写func2<int>();
就可以做到这一点
int func() { return 5; }
template<class T>
T func2() { return func(); }
int main()
{
auto k = func2();
//auto k = func2<int>();
return 0;
}
最佳答案
不可以,因为无法推断出模板参数。您需要指定它,否则编译器将如何知道用它替代什么? int
? double
?用户定义的类型?
编辑
如果您已经在使用C++ 0x(由于auto
,我认为是这样),则可以使用新的尾随返回类型函数样式:
auto func2() -> decltype(func()) {
return func();
}
decltype(func())
将获得func
的返回类型,而无需实际调用它。编辑2
好的,您甚至不需要尾随的返回类型,一个简单的
decltype
也可以完成此工作:decltype(func()) func2() { return func(); }
尾随返回类型在返回取决于某些或所有参数的情况下尤其有用,尤其是在使用模板的情况下。有关详细说明,请参见here。
关于c++ - 没有<>的功能模板的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5499812/