C++ std::async能否调用std::function对象?
是否可以使用std::async调用使用std::bind创建的函数对象。以下代码无法编译:C++ std::async能否调用std::function对象?,c++,c++11,std-function,stdasync,C++,C++11,Std Function,Stdasync,是否可以使用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, c
#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;
}
#包括
#包括
#包括
使用名称空间std;
类加法器{
公众:
整数相加(整数x,整数y){
返回x+y;
}
};
int main(int argc,const char*argv[]
{
加法器a;
函数sumFunc=bind(&Adder::add,&a,1,2);
auto future=async(launch::async,sumFunc);//此处出错
库特
是否可以使用std::async
调用使用std::bind
创建的函数对象
是的,只要提供正确数量的参数,就可以调用任何函子
我做错什么了吗
您正在将绑定函数(不带参数)转换为函数(带(并忽略)两个参数),然后尝试在不带参数的情况下启动该函数
您可以指定正确的签名:
function<int()> 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);});
async
从何处获取函子参数?请尝试传递std::function
。
auto future = async(launch::async, []{return a.add(1,2);});