1

我正在使用一个 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);
}

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

4

2 回答 2

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自己成为一个函数指针,那么你会在构造时将它分配给一个全局函数。

于 2013-05-10T17:14:54.303 回答
1

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

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

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

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

于 2013-05-10T17:16:59.210 回答