#include<iostream>
using namespace std;
typedef void (*PEN)();
class A
{
public:
void foo(){
run(func);
}
private:
void run(PEN pfn){
pfn();
}
void func(){
cout<<"ok"<<endl;
}
};
int main()
{
A a;
a.foo();
return 0;
}
这样编译是通不过的,error C2664: 'run' : cannot convert parameter 1 from 'void (void)' to 'void (__cdecl *)(void)'
原因typedef定义的PEN是指向普通函数的,不能指向类的成员函数,这是有区别的。
把A的定义改成这样就行了
class A
{
public:
typedef void (A::*PEN)();
void foo(){
run(func);
}
private:
void run(PEN pfn){
(this->*pfn)();
}
void func(){
cout<<"ok"<<endl;
}
};