C++ std::async能否调用std::function对象?

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

是否可以使用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;
}
#包括
#包括
#包括
使用名称空间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);});