函数指针的定义

Definition of Function Pointers

本文关键字:定义 指针 函数      更新时间:2023-10-16

我正在使用一个sdk,在那里我必须定义一个回调函数,问题是,"示例"代码附带全局函数和非常过程化的方法。为了将其带入结构,我创建了类。但是,在定义和声明参数时,我无法获得正确的参数语法O_o

这是我的工作示例:

In my code.h:
void   (*MessageHandler)(int msgType, char* msg){printf("n%sn", msg);}

这个工作得很好,当我在代码中调用。cpp

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

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

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

但是这不起作用,我找不到任何提示如何修复它。如果能得到提示就好了!

既然它是一个函数,那么就像对任何函数那样定义它:

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

它的名字Code::MessageHandler实际上是一个正确类型的函数指针。如果Codenamespace,这就像预期的那样工作,如果它是class,您必须声明它为static以获得未绑定的引用。

另外,考虑使用typedef来使源代码更易于阅读。

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

void Code::MessageHandler( int msgType, char* msg ){
  printf( "n%sn", msg );
}
// Create a function pointer called fn to point at a static function
void (*fn)( int, char * ) = &Code::MessageHandler;

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

如果你想让Code::MessageHandler本身是一个函数指针,那么你应该在构造时将它赋值给一个全局函数。