可能是因為 C/C++ 本身的歷史關係, 函數指標的型別宣告方式還蠻艱誨深澀, 基本的全域靜態函式的指標宣告和傳遞可能就能讓許多 Programmer 停下來翻書查語法了. 更別說 C++ 中引入的非靜態成員函式指標語法. 這邊筆記一下網路的參考資料和範例:
C++ Syntax: Pointer-to-member-function
範例:
#include <iostream> class Abc { public: // A target callback function with type: 'bool (Abc::*)(const char*)' bool haha(const char *str) { std::cout << "haha(): " << str << std::endl; return (str != NULL); } }; class Def { public: // Invoker: pass instance by ref void invoke (bool (Abc::*func)(const char *str), Abc &instance) { (instance.*func)("test"); } // Invoker: pass instance by addr void invokeptr (bool (Abc::*func)(const char *str), Abc *instance) { (instance->*func)("test"); // '.*' is replaced by '->*' } }; int main(int argc, char *argv[]) { Abc abc; Def def; def.invoke(&Abc::haha, abc); def.invokeptr(&Abc::haha, &abc); return 0; }
沒有留言:
張貼留言