クラスのメソッドを、ディスパッチャークラス的なものに格納しておき
あとで呼び出して使いたいといったことがよくあるので、
メモっておく
◎メソッドのアドレスを記憶しておいて、後で呼び出すサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
// 登録するクラス class CTest { public: int member; void func() {printf("%d\n", this->member);} CTest(){} }; // ディスパッチャー template<class C> class CMng { public: void registCallback( C* instance_, void(C::*m)() ) { this->instance = instance_; this->method = m; } void call(){ (this->instance->*method)(); } void(C::*method)(); C* instance; }; void run() { // インスタンス作成 CTest t; t.member = 30; // ディスパッチャーへ呼び先を登録 CMng<CTest> mng; mng.registCallback( &t, &CTest::func ); // 実際に呼んでみる mng.call(); } |