我正在使用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);
}
但这不起作用,我找不到任何提示如何解决它。得到一个提示会很高兴!
答案 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
实际上是一个正确类型的函数指针。如果Code
是namespace
,则按预期工作,如果是class
,则必须声明static
以获取未绑定的引用。
另外,请考虑使用typedef
使源代码更具可读性。