[英]Can anyone explain me this part of the code
這是一個回調函數,但我不知道這部分是如何工作的
如果(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;
}
cb_onPress
是指向返回void
並接受Button&
參數的函數的指針。 它可能指向以下內容:
void foo(Button&){ std::cout << "Foo Button!\n"; }
在Button
成員函數內部的這一行,
if (cb_onPress) { cb_onPress(*this); }
檢查指向函數的指針是否不為null,如果是,則調用該指針,並傳遞與參數相同的Button
實例(即傳遞*this
實現的結果)。
使用示例:
Button b;
b.pressHandler(foo); // sets cb_onPress to point to foo
....
b.process(); // Prints "Foo Button"
盡管大概是對事件的響應,但流程調用在內部發生。
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);
如果(cb_onPress)
檢查cb_onPress是否為空指針。 換句話說,檢查該函數是否已定義。 如果不是,則調用函數
cb_onPress
在那個物體上
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.