某所で書いているプログラムで, std::thread() にクラスのメンバ関数を渡したいなーってことがあった.
std::thread::thread - cppreference.comにもそれっぽい記述がないのでググっていると, どうやらこんな感じにするらしい.

c++ - Start thread with member function - Stack Overflow

この&nyan::workerみたいな記述がサッパリわからなかったので, C++のクラスのメンバ関数のポインタを調べたときのメモ.

関数ポインタ

そもそもC/C++の関数ポインタについてあまり詳しくなかったので復習してみる.

C++ポケットリファレンスの36ページによると,

戻り値の型 (*ポインタ変数名)(仮引数リスト);

のように書くらしい.

メンバへのポインタ

じゃあ本題のメンバへのポインタはどう書くかというと, 同ページによれば

// メンバ変数
型 クラス名::*ポインタ変数名;

// メンバ関数
戻り値の型 (クラス名::*ポインタ変数名)(仮引数リスト);

のように書き, こんな感じに使うらしい.

( ˘⊖˘)ん???

おわり

最初に書いたstd::thread()の例みたいに, クラスのメンバを外で使いたい場合はメンバを指すポインタオブジェクトを渡せば良いわけですね.

うーん, クラスがどういうものかっていうのがよくわかる書き方ではあるなぁと思うけど, かなり特殊だしすぐ忘れそう…..