首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C++ 類成員函數作為回調函數的正確定義與實現方法

     編輯:關於C

什麼是回調函數

回調函數是透過函數指標被呼叫的函數。當你把函數的位址作為參數傳遞給另一個函數,並在特定事件或條件發生時由對方呼叫該函數,即構成回調。回調函數不是由實現方直接呼叫,而是由事件觸發方在適當時機調用,用於響應事件。

類成員函數作為回調的三步驟

  1. 聲明回調函數型別:使用 typedef 定義函數指標型別。
  2. 定義靜態成員函數:類的成員函數若要作為回調,必須聲明為 static,否則擁有隱含的 this 指標,無法匹配普通函數指標簽名。
  3. 設置觸發條件:在呼叫端將靜態成員函數位址作為參數傳遞給註冊函數。

代碼範例

// 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;
}

回調與 API 的區別

  • API:低層提供給高層呼叫,介面對高層可見。
  • 回調:高層提供給低層呼叫,介面對低層不可見,必須由高層「安裝」(註冊)給低層。低層透過函數指標保存回調,在事件觸發時透過指標呼叫。

本質上,回調就是「高層寫函數,低層存指標,事件觸發時低層透過指標呼叫高層函數」。

進階:非靜態成員函數回調

若必須使用非靜態成員函數,需結合 std::function、std::bind 或 lambda 捕獲 this 指標,或使用「靜態包裝器 + 使用者資料指標」模式傳遞物件實例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved