どのクラス/構造体のオブジェクトを取り、そのメンバ関数をスレッドで呼び出すことができるテンプレート関数を書いてみたいと思います。以下はコンパイルされません、私はそれが把握できないと思います:std::result_of< F(Args...) >::type
。std :: asyncを使ってクラスメンバ関数を起動するテンプレート関数
提案、お手伝いしますか?
class test_f {
public:
int f(int m) {
std::cout << " call f : " << m << std::endl;
return 1;
}
};
template<typename F, typename T, typename... Args>
std::future<typename std::result_of<F(Args...)>::type>
Async(F&& f, T&& t, Args&&... params) {
return(std::async(std::launch::async, std::forward<F>(f),
std::forward<T>(t), std::forward<Args>(params)...));
}
int main() {
test_f tf ;
auto a = Async(&test_f::f, &tf, 1) ;
}
decltpeを使用し、関数の本体で関数のシグネチャを複製することができます。 – MikeMB
あなたはresult_ofにTを渡すのを忘れていませんか? – MikeMB