#include <cstdlib> #include <iostream> class FPSample { public: void function_switch(int sw) { switch (sw) { case 1: m_pFunctionSample = &FPSample::function1; break; case 2: m_pFunctionSample = &FPSample::function2; break; default: std::cout << "default" << std::endl; } } bool function(int x) { return (this->*m_pFunctionSample)(x); // return (*mFunctionSample)(x); // Error } private: typedef bool (FPSample::*FUNCTION_SAMPLE)(int); FUNCTION_SAMPLE m_pFunctionSample; bool function1(int x) { std::cout << "function1 : " << x << std::endl; return true; } bool function2(int x) { std::cout << "function2 : " << x << std::endl; return false; } }; int main(int argc, char** argv) { FPSample mFPSample; int sw; int x; x = 10; sw = 1; mFPSample.function_switch(sw); mFPSample.function(x); sw = 2; mFPSample.function_switch(sw); mFPSample.function(x); return 0; }
2010年6月18日金曜日
忘れがちなC++での関数ポインタ
クラス内部で状態によって呼ぶ出す関数を変えるときには関数ポインタを使うと便利ですが、C++では書き方が若干面倒なので、その記録。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿