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

C/C++ 回調函數使用詳解

     編輯:關於C++

什麼是回調函數

回調函數是透過函數指標調用的函數。若將函數 A 的指標作為參數傳給函數 B,B 內部透過該指標調用 A,即構成回調機制。A 為回調函數,通常在系統滿足特定條件時自動執行。回調能改善軟體結構,提高復用性。

函數指標基礎

函數指標指向函數而非變數,儲存函數的記憶體位址。C++ 類成員函數因需物件實例調用,不能直接作為普通回調;常見做法是將成員函數設計為 static 靜態成員函數。

代碼範例


#include <iostream>

typedef int(*Fun11)(int, int);
typedef float(*Fun12)(float, float);

int min(int a, int b) { return a < b ? a : b; }
float max(float a, float b) { return a > b ? a : b; }

int test1() {
    Fun11 pFun1 = &min;
    int ret1 = pFun1(-1, 2);
    std::cout << "min callback ret: " << ret1 << std::endl;

    Fun12 pFun2 = &max;
    float ret2 = pFun2(3.4f, 5.6f);
    std::cout << "max callback ret: " << ret2 << std::endl;
    return 0;
}

// 類靜態成員函數回調範例
class CallBack {
    int a;
    typedef void(*Fun2)(void*);
    Fun2 m_fptr;
    void* m_arg;
public:
    CallBack() : a(0) {}
    void registerProc(Fun2 fptr, void* arg) { m_fptr = fptr; m_arg = arg; }
    void doCallBack() { if (m_fptr) m_fptr(m_arg); }
    ~CallBack() {}
    static void display(void* _this) {
        if (!_this) return;
        CallBack* pc = (CallBack*)_this;
        pc->a++;
        std::cout << "a = " << pc->a << std::endl;
    }
};

void callback31() {
    CallBack cb;
    cb.registerProc(CallBack::display, &cb);
    cb.doCallBack();
}

int main() {
    test1();
    callback31();
    return 0;
}

關鍵點總結

  • 使用 typedef 簡化函數指標宣告。
  • 靜態成員函數無 this 指標,簽名與普通函數一致,適合作為回調。
  • 回調函數實現了控制反轉,降低模組耦合度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved