私はC++で書かれたカスタムメニュークラスを持っています。コードを読みやすい関数に分離するために、コールバックを使用しています。C++で使用可能なコールバックを実装する良い方法
私はメニューのホストにシングルトンを使用したくないので、コールバックに最初のパラメータとして渡される別のパラメータ(ターゲット)を提供しています。 。
登録-署名
AddItem(string s, void(*callback)(void*,MenuItem*), void* target = NULL)
登録の例
menu->AddItem(TRANSLATE, "translate", &MyApp::OnModeSelected);
ハンドラ
/* static */
void MyApp::OnModeSelected(void* that, MenuItem* item) {
MyApp *self = (MyApp*)that;
self->activeMode = item->text;
}
の例は1つが、このアプローチで汚れ検討することもできはありますか?多分もっと良いものはありますか?
あなたはすべきですここではコールバックとして静的メンバーメソッドを使用しないでください。extern "C"と宣言されている関数を使用しているだけです。使用しているコンパイラが(現在)静的メソッドを呼び出すために同じメソッドを使用している –