这是一个回调函数,但我无法弄清楚这部分是如何工作的
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;
}
答案 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
在那个对象上