我总是以下列方式定义我的事件处理程序:
// A.h
class A
{
public:
A();
void someMethod();
void onEvent(void (*callback)(char *, int));
private:
typedef void (*MyEvent)(char *, int);
MyEvent _on_update_callback;
};
// A.cpp
void A::someMethod(){
if(condition){
if(NULL != _on_update_callback){
_on_update_callback(&"some message", 42);
}
}
}
void A::onEvent(void (*callback)(char *, int)){
if(NULL != callback){
_on_update_callback = callback;
}
}
我通过以下方式从主应用程序中使用它:
// main.cpp
#include "A.h"
A a;
int main(void){
a.onEvent(&eventHandler);
}
void eventHandler(char *text, int code){
// so something
}
现在我需要从B类(而不是主应用程序)定义A的事件监听器。
// B.h
#include "A.h"
class B
{
public:
B();
private:
A _a;
void _onEvent(char *text, int code);
};
// B.cpp
B::B(){
_a.onEvent(&_onEvent);
}
void B::_onEvent(char *text, int code){
// do something here
}
但是我收到以下错误:
错误:没有匹配函数来调用'A :: onEvent(void(B :: *)(char *, int))'注意:来自'void的参数1没有已知的转换 (B :: *)(char *,int)'到'void(*)(char *,int)'