C++ 函数指针
//c++中静态方法的函数指针 #include <stdio.h> class CEventTest { public: //定义静态方法 static int handle_input(int fd) { return fd; } }; //静态方法的函数指针调用 int upcall(int (*callback)(int), int handle) { int result = 0; result = callback(handle); printf("result is [%d] .\n", result); return 0; } void test() { int (*cb)(int); //定义静态方法的函数指针变量cb,不需要指明类名 //静态方法赋值给函数指针变量 cb = CEventTest::handle_input; //以函数指针方法调用实例方法 upcall(cb, 2); } int main() { test(); getchar(); return 0; }
//c++中实例方法的函数指针 #include <stdio.h> class CEventTest { public: //定义实例方法 int handle_input(int fd) { return fd; } }; //实例方法的函数指针调用 int upcall(CEventTest *event_handler, int (CEventTest::*callback)(int), int handle) { int result = 0; //(event_handler->*callback) /* (event_handler->*callback):类的实例方法的函数指针使用,()是必须的 */ result = (event_handler->*callback)(handle); printf("result is [%d] .\n", result); return 0; } void test() { int (CEventTest::*cb)(int); //定义实例方法的函数指针变量cb //注意:实例方法的函数指针必须是(CEventTest::*cb),不可以只写int (*cb)(int); CEventTest *obj = new CEventTest; //定义CEventTest实体对象 //实例方法赋值给函数指针变量 cb = &CEventTest::handle_input; //以函数指针方法调用实例方法 upcall(obj, cb, 2); } int main() { test(); getchar(); return 0; }