//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;
}