Ладно, исправляя часть беспорядка (то есть добавляя все, что отсутствует), мы можем прийти к простому решению с использованием лямбда-функции:
#include <future>
#include <iostream>
class Bar {
public:
int myMethod(void) {
std::cerr << "Hi!\n";
return 1;
}
};
class Foo {
private:
std::unique_ptr<Bar>& bar;
int retVal;
std::future<int> myFuture = std::async(std::launch::async, [this](void)->int{return bar->myMethod();});
public:
Foo(std::unique_ptr<Bar>& bar_) : bar(bar_) {}
};
int main(void) {
std::unique_ptr<Bar> bar = std::make_unique<Bar>();
Foo foo(bar);
return 0;
}
Это, конечно, не единственное решение,ни лучший с точки зрения производительности.