以前一直以为函数指针类型就是只有这种样式的,即
void (*PFUN_SAVE)(void*);
那么PFUN_SAVE就是可以表示void fun(void*param),void get(void*param)这种实际的函数,PFUN_SAVE pFn = &(fun),pFn = &(get);
但是,对于类成员函数,由于编译器在编译时会将函数的参数默认加上this参数,同时将其改为全局函数类型,即
void MyClass::Save(void* param);会变成void SaveMyClass(MyClass* this, void* param);
那么像PFUN_SAVE就不能用来保存MyClass的Save函数的地址了。
今天,在看别人的代码是看到了一个用来表示成员函数的函数指针类型,写法也很简单,如下
void (MyClass::*PFUN_SAVE)(void*);
即可用来保存一个对象的成员函数了
PFUN_SAVE saveFun = &(obj.Save);