いくつかのボタンを含む OpenGL メニューに取り組んでいます。ボタンが押されたときに実行されるアクション(任意のクラスのメンバー関数(固定シグネチャ付き)!)をボタンに関連付けられるようにしたいと考えています。今すぐできるけど、1種類だけ。コールバックに任意のクラスの任意のメンバー関数を使用できるようにしたいと考えています。
今、私は次のようにしています:
#define BUTTONCALLBACK(Func) bind1st( mem_fun( &ClassICanSupport::Func ), this )
次に、次のようなボタンを作成できます。
Button* b = new Button("Bla", BUTTONCALLBACK(functionIWanttoCall));
Callback 関数には次のシグネチャがあります。
void callback(Button* source);
ボタンを押すと、渡したコールバック関数を実行できます。
boost::bind を見てみましたが、問題に取り組む方法を実際に見つけることができませんでした。さらに、すべてのクラスはクラス Object から派生しているため、typeid ハックを使用して適切なクラスに変換できる void* について考えましたが、機能させることができませんでした。最後に、コールバック関数のクラスタイプを完全に削除できず(ボタンクラスに関数ポインターを保存するために必要です)、それでも関数を呼び出すことができるという問題が常にありました。
この問題に取り組む方法はありますか?