gpt4 book ai didi

c++ - result_of 无法推断返回类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:14 26 4
gpt4 key购买 nike

以下代码无法在 GCC 5.2 中编译:

template<typename FuncType, typename... ArgTypes>
result_of_t<FuncType(ArgTypes...)> FuncCall(const FuncType &f, ArgTypes&... args)
{
return f(forward<ArgTypes>(args)...);
}

string SomeFunc()
{
return "SomeFunc";
}

int main()
{
cout << FuncCall([](){return "Lambda";}) << "\n"; // This call works properly
cout << FuncCall(SomeFunc) << "\n"; // this call fails
}

但如果我更改以下行:

result_of_t<FuncType(ArgTypes...)> FuncCall(const FuncType &f, ArgTypes&... args)

result_of_t<FuncType&&(ArgTypes...)> FuncCall(const FuncType &f, ArgTypes&... args)

然后它就可以正常工作了。

我不明白在这种情况下如何使用 FuncType 右值引用来解决问题。任何人都可以分享一些关于这方面的信息吗?

最佳答案

C++ 中的函数类型可能没有作为函数类型的返回类型,[dcl.fct]/10:

Functions shall not have a return type of type array or function, although they may have a return type of type pointer or reference to such things.

因此,当 FuncType 被推导为函数类型时,声称的类型 FuncType(Args...) 是错误格式的。

关于c++ - result_of 无法推断返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34434675/

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