Класс и стандартный набор ::async для члена класса в C++

Я пытаюсь написать член класса, который несколько раз параллельно вызывает другой член класса.

Я написал простой пример проблемы и даже не могу его скомпилировать. Что я делаю неправильно, вызывая std ::async? Я предполагаю, что проблема будет в том, как я передаю функцию.

#include <vector>
#include <future>
using namespace std;
class A
{
    int a,b;
public: 
    A(int i=1, int j=2){ a=i; b=j;} 

    std::pair<int,int> do_rand_stf(int x,int y)
    {
        std::pair<int,int> ret(x+a,y+b);
        return ret;
    }

    void run()
    {
        std::vector<std::future<std::pair<int,int>>> ran;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                auto hand=async(launch::async,do_rand_stf,i,j);
                ran.push_back(hand);    
            }
        }
        for(int i=0;i<ran.size();i++)
        {
            pair<int,int> ttt=ran[i].get();
            cout << ttt.first << ttt.second << endl;
        } 
    }
};

int main()
{
    A a;
    a.run();
}

компиляция:

g++ -std=c++11 -pthread main.cpp 
28
задан smttsp 5 November 2019 в 13:47
поделиться