功能指针的定义

时间:2013-05-10 17:09:23

标签: c++ function-pointers

我正在使用sdk,我必须定义一个回调函数,问题是,“示例”代码附带了全局函数和非常程序化的方法。为了将它带入一个结构,我正在创建类。但是在定义和声明O_o

时,我无法正确获得参数语法

所以这是我的工作范例:

在我的code.h中:

void   (*MessageHandler)(int msgType, char* msg){printf("\n%s\n", msg);}

当我在我的code.cpp中调用时,这很好用。

void (*opFunc)(int msgType, char* msg) =  MessageHandler;

但是我想在我的cpp中做定义,我找不到语法,通常它应该是:

void (*Code::MessageHandler)(int msgType, char* msg){
    printf("\n%s\n", msg);
}

但这不起作用,我找不到任何提示如何解决它。得到一个提示会很高兴!

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试为Code类中的函数指针定义函数?您可以创建一个函数(静态成员或全局函数)并使用该函数的名称作为指针。

void Code::MessageHandler( int msgType, char* msg ){
  printf( "\n%s\n", msg );
}

// Create a function pointer called fn to point at a static function
void (*fn)( int, char * ) = &Code::MessageHandler;

再次注意,如果MessageHandler不是静态函数,这将不起作用,否则你将处理成员函数指针,这与函数指针非常不同。

如果你希望Code::MessageHandler本身是一个函数指针,那么你可以在构造时将它分配给一个全局函数。

答案 1 :(得分:1)

因为它是一个函数,所以像对任何函数一样定义它:

void Code::MessageHandler(int msgType, char* msg){
    printf("\n%s\n", msg);
}

它的名称Code::MessageHandler实际上是一个正确类型的函数指针。如果Codenamespace,则按预期工作,如果是class,则必须声明static以获取未绑定的引用。

另外,请考虑使用typedef使源代码更具可读性。