Ответ 1
do_rand_stf
является нестатической функцией-членом и поэтому не может быть вызвана без экземпляра класса (неявный параметр this
). К счастью, std::async
обрабатывает его параметры, такие как std::bind
, и bind
в свою очередь может использовать std::mem_fn
, чтобы превратить указатель на функцию-член в функтор, который принимает явный параметр this
, поэтому все, что вам нужно сделать, это передать this
на вызов std::async
и использовать синтаксис указателя синтаксической функции-члена при передаче do_rand_stf
:
auto hand=async(launch::async,&A::do_rand_stf,this,i,j);
Тем не менее, существуют другие проблемы в коде. Во-первых, вы используете std::cout
и std::endl
без #include
ing <iostream>
. Более серьезно, std::future
не является скопируемым, только подвижным, поэтому вы не можете push_back
именованный объект hand
без использования std::move
. Или просто передайте результат async
в push_back
напрямую:
ran.push_back(async(launch::async,&A::do_rand_stf,this,i,j));