回調函數是透過函數指標被呼叫的函數。當你把函數的位址作為參數傳遞給另一個函數,並在特定事件或條件發生時由對方呼叫該函數,即構成回調。回調函數不是由實現方直接呼叫,而是由事件觸發方在適當時機調用,用於響應事件。
typedef 定義函數指標型別。static,否則擁有隱含的 this 指標,無法匹配普通函數指標簽名。// 1. 聲明回調函數型別
typedef void (*FunPtr)(void);
// 2. 定義類別與靜態回調函數
class A {
public:
static void callBackFun(void) { // 必須為 static
// 回調邏輯
}
};
// 3. 註冊與觸發函數
void Funtype(FunPtr p) {
p(); // 呼叫回調
}
int main(void) {
Funtype(A::callBackFun); // 傳遞靜態成員函數位址
return 0;
}
本質上,回調就是「高層寫函數,低層存指標,事件觸發時低層透過指標呼叫高層函數」。
若必須使用非靜態成員函數,需結合 std::function、std::bind 或 lambda 捕獲 this 指標,或使用「靜態包裝器 + 使用者資料指標」模式傳遞物件實例。