gpt4 book ai didi

c++ - std::async 可以调用 std::function 对象吗?

转载 作者:可可西里 更新时间:2023-11-01 18:20:14 25 4
gpt4 key购买 nike

是否可以使用 std::async 调用通过 std::bind 创建的函数对象。以下代码编译失败:

#include <iostream>
#include <future>
#include <functional>

using namespace std;

class Adder {
public:
int add(int x, int y) {
return x + y;
}
};

int main(int argc, const char * argv[])
{
Adder a;
function<int(int, int)> sumFunc = bind(&Adder::add, &a, 1, 2);
auto future = async(launch::async, sumFunc); // ERROR HERE
cout << future.get();
return 0;
}

错误是:

没有匹配函数来调用“async”: 候选模板被忽略:替换失败 [with Fp = std::_1::function &, Args = <>]:'std:: 中没有名为'type'的类型_1::__invoke_of,>

是不能对 std::function 对象使用异步还是我做错了什么?

(这是使用 Xcode 5 和 Apple LLVM 5.0 编译器编译的)

最佳答案

Is it possible to call function objects created with std::bind using std::async

是的,您可以调用任何仿函数,只要您提供正确数量的参数即可。

am I doing something wrong?

您正在将不带参数的绑定(bind)函数转换为 function<int(int,int)> ,接受(并忽略)两个参数;然后尝试不带任何参数地启动它。

您可以指定正确的签名:

function<int()> sumFunc = bind(&Adder::add, &a, 1, 2);

或者避免创建 function 的开销:

auto sumFunc = bind(&Adder::add, &a, 1, 2);

或者不用bind完全:

auto future = async(launch::async, &Adder::add, &a, 1, 2);

或使用 lambda:

auto future = async(launch::async, []{return a.add(1,2);});

关于c++ - std::async 可以调用 std::function 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19079179/

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