任何人都可以解释这部分代码

时间:2014-04-02 07:09:57

标签: c++ function callback

这是一个回调函数,但我无法弄清楚这部分是如何工作的

  

if(cb_onPress){cb_onPress(* this); } //触发onPress事件

class Button;
typedef void (*buttonEventHandler)(Button&);

class Button {
  public:
 //code
   private:
 //code
 buttonEventHandler  cb_onPress;
};

 void Button::process(void)
 {
  //code
    if (cb_onPress) { cb_onPress(*this); }   //fire the onPress event

 }       

void Button::pressHandler(buttonEventHandler handler)
{
  cb_onPress = handler;
}

3 个答案:

答案 0 :(得分:2)

cb_onPress是指向返回void并获取Button&参数的函数的指针。它可能指向这样的事情:

void foo(Button&){ std::cout << "Foo Button!\n"; }

这一行,在Button成员函数

if (cb_onPress) { cb_onPress(*this); } 

检查指向函数的指针是否为空,如果是,则调用它,将Button的相同实例作为参数传递(即通过*this实现的内容)。

使用示例:

Button b;
b.pressHandler(foo);  // sets cb_onPress to point to foo
....
b.process();          // Prints "Foo Button"

虽然可能是对内部的调用是在内部发生的,但是为了响应n事件。

答案 1 :(得分:1)

if (cb_onPress) { cb_onPress(*this); }

cb_onPress是指向函数的指针。如果指针是nullptr你无法调用它,那么代码就不会事先检查它。

支持的客户端总体使用情况如下:

void myButtonEventHandler(Button& b) { ...do something when pressed... };

Button button;  // make a button
button.pressHandler(myButtonEventHandler);

答案 2 :(得分:0)

  

if(cb_onPress)

检查cb_onPress是否为空指针。换句话说,检查之前是否定义了该功能。如果不是那么它调用函数

  

cb_onPress

在那个对象上