typedef声明函数指针及要注意的问题

来源:互联网 发布:北京东方怡达网络招聘 编辑:程序博客网 时间:2024/05/24 03:22

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

原创粉丝点击