gpt4 book ai didi

c++ - 这个 result_of 用法有什么问题?

转载 作者:太空狗 更新时间:2023-10-29 20:44:56 25 4
gpt4 key购买 nike

auto lambda = [](){ return 7; };
std::result_of<decltype(lambda)()>::type val = lambda(); // 'val' : illegal use of type 'void'

我收到错误:“val”:非法使用类型“void”。为什么该类型会解析为 void?

我可能对 result_of 得到的结果有误。我只想要可以传递 std::function 的任何内容的返回值。

最佳答案

如果您的编译器无法编译它,则不要使用 std::result_of:

decltype(lambda()) val = lambda();

完全一样,它应该(嗯,可以)在 VC2010 中工作。

你也可以使用auto,虽然我认为这不是你想要的:

auto val = lambda();

编辑:由于您在函数的返回值中使用了 this,因此上面显示的 decltype 解决方案可以正常工作:

#include <type_traits>
#include <iomanip>
#include <iostream>

template<class Functor>
auto foo(const Functor &f) -> decltype(f()) {
return f();
}

int main() {
auto lambda = [](){ return 7; };
auto val = foo(lambda);
std::cout << std::boolalpha;
std::cout << std::is_same<decltype(val), int>::value << std::endl;
}

演示 here .

关于c++ - 这个 result_of 用法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11939137/

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