用C ++实现事件处理程序

时间:2015-07-29 05:11:58

标签: c++ event-handling eventhandler

我总是以下列方式定义我的事件处理程序:

// 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)'

0 个答案:

没有答案