无论如何,我无需编写func2<int>();就可以做到这一点

int func() { return 5; }

template<class T>
T func2() { return func(); }


int main()
{
    auto k = func2();
    //auto k = func2<int>();

    return 0;
}

最佳答案

不可以,因为无法推断出模板参数。您需要指定它,否则编译器将如何知道用它替代什么? intdouble?用户定义的类型?
编辑
如果您已经在使用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/

10-15 07:02