通過c++示例解釋回撥

weixin_34232744發表於2018-10-06

回撥的簡易解釋

簡單來說回撥是一種雙向呼叫模式,例如我們是呼叫方A,去呼叫被調方B中的方法x(),處理完成後,被調方會反過來呼叫我們傳過去的函式y(),實現我方在開發中寫的y函式的功能。

回撥的簡易示例

#include <stdio.h>

void firstCalc(int x);
void secondCalc(int x);

int main()
{
    //我方開發視角,即為使用者層,執行輸入引數等動作
    CallBack callback;
    callback.changeNum(1, 2, firstCalc);
    callback.changeNum(1, 2, secondCalc);
    return 0;
}

//開發處理層,由我們開發人員來書寫計算邏輯
void firstCalc(int result)
{
    int otherNum = 10;
    printf("result first值為: %d\n", result + otherNum); // 9
}

//開發處理層,由我們開發人員來書寫計算邏輯
void secondCalc(int result)
{
    int otherNum = 11;
    printf("result second值為: %d\n", result - otherNum); // -12
}
 

以上的程式碼一般是由我方開發人員寫的。

/*實際開發中,下面這個類可能是被調方寫的邏輯,會被封裝起來,僅提供介面函式,相當於系統底層。
我們的目的也許是由此得到底層的某些引數,例如length,或許是由底層檢測某種事件,觸發我們
自己寫的函式,例如系統檢測到點選事件,就執行我們開發者寫的點選後的函式邏輯*/
#include <stdio.h>
typedef void (*NumCalc)(int ); // 定義函式指標
int changeNum(int x, int y, NumCalc fp);

class CallBack
{
   public:
      double length; 

      int changeNum(int incNum, int decNum, NumCalc fp)
      {
          fp(incNum - decNum);
      }  
};

實際開發中,上面這個類可能是被調方寫的邏輯,會被封裝起來,僅提供介面函式,相當於系統底層。
我們的目的也許是由此得到底層的某些引數,例如length,或許是由底層檢測某種事件,觸發我們自己寫的函式,例如系統檢測到點選事件,就執行我們開發者寫的點選後的函式邏輯。這一切即可通過傳遞函式指標給底層,讓它把我們需要的東西傳給我們。

以上。

我的github傳送地址:https://github.com/JunJieDing666

相關文章