[英]Can std::async call std::function objects?
是否可以使用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'的匹配函数:忽略候选模板:替换失败[使用Fp = std :: _1 :: function&, Args = <>]:'std :: _1 :: __ invoke_of中没有名为'type'的类型 ,>
是不是可以与std :: function对象使用异步,或者我做错了什么?
(这是使用Xcode 5和Apple LLVM 5.0编译器编译的)
是否可以使用
std::async
调用使用std::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);});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.