gpt4 book ai didi

c++ - 没有<>的功能模板问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:57 25 4
gpt4 key购买 nike

有没有办法不用写 func2<int>(); 就可以做到这一点?

int func() { return 5; }

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


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

return 0;
}

最佳答案

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com