gpt4 book ai didi

c++ - 使用 std::result_of 确定模板参数的返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:41 25 4
gpt4 key购买 nike

我认为这段代码是不言自明的,但基本上模板函数 ExecFunc 应该能够执行另一个函数并返回其结果。我知道我可以使用 decltype 而不是 result_of 获得类似的结果,但这个问题是为了理解为什么我写的东西不起作用:该片段无法在 gcc v4.9.2 上编译。

这是我的:

#include <type_traits>

int f(int i)
{
return i;
}

template<class F, class T>
auto ExecFunc(F f, T arg) -> typename std::result_of<F()>::type
{
return f(arg);
}

int main() {
auto a = ExecFunc(f, 3);
return 0;
}

这是编译器的输出:

prova.cpp: In function ‘int main()’:
prova.cpp:15:26: error: no matching function for call to ‘ExecFunc(int (&)(int), int)’
auto a = ExecFunc(f, 3);
^
prova.cpp:15:26: note: candidate is:
prova.cpp:9:6: note: template<class F, class T> typename std::result_of<F()>::type ExecFunc(F, T)
auto ExecFunc(F f, T arg) -> typename std::result_of<F()>::type
^
prova.cpp:9:6: note: template argument deduction/substitution failed:
prova.cpp: In substitution of ‘template<class F, class T> typename std::result_of<F()>::type ExecFunc(F, T) [with F = int (*)(int); T = int]’:
prova.cpp:15:26: required from here
prova.cpp:9:6: error: no type named ‘type’ in ‘class std::result_of<int (*())(int)>’

注意这个问题可能看起来像 this one 的重复但公认的解决方案对我不起作用(至少,据我所知,我已将该解决方案合并到我的代码中)。

最佳答案

你的函数是int f(int i)但你调用F()这是未知的。 std::result_of<F()>::type应该是 std::result_of<F(T)>::type .

Live Example

关于c++ - 使用 std::result_of 确定模板参数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637997/

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