C++で静的メンバ関数をスレッドで実行するには、以下のように記述する。
class A { public: static void f() {}; }; int main() { thread th(A::f); th.join(); return 0; }
では、メンバ関数をスレッドで実行するにはどうすればよいだろうか。
class A { public: void f() {}; }; int main() { A a; thread th(a.f); th.join(); return 0; }
このように書くとエラーになる。
thread th(&a.f);
このように書いてもエラーになる。
thisポインタを引数にする方法
マルチスレッドでクラスのメンバ関数を実行する場合(C++11 std::thread) - Programming Serendipity
この記事によると、引数にthisポインタを渡すことで呼び出せるようだ。
thread th(&A::f, &a);
このような書き方が可能だ。
なんか処理系依存な気がするが、規格書にある方法らしい。
規格書で読むC++11のスレッド
(p.22)