Just My Life & My Work

最近有個任務是寫回調函式 (Callback Function)。在寫 App 已經用過類似的機制,被包裝得相當容易使用。這次就來實現比較底層的作法。

日常生活中,回調函式就像一個「代理人」。當你需要某人幫忙做一件事情,但你自己又不能做的時候,你就可以請一個「代理人」來幫你。

例如,你想去一個地方,但你不知道路。你可以請一個朋友來幫你帶路。在這個例子中,你的朋友就是你的「代理人」。

程式設計中,回調函式也是一樣。當你需要某個函式在完成某些工作後通知你,但你自己又不能做的時候,你可以使用回調函式。

例如,你想下載一個文件。你可以使用一個函式來下載文件,並在下載完成後通知你。在這個例子中,下載文件的函式就是你的「代理人」。

以下是一些日常生活中的回調函式的例子:

  • 你在餐廳點餐,服務生會在餐點做好後通知你。
  • 你在網上購物,商家會在商品發貨後通知你。
  • 你在銀行存款,銀行會在存款成功後通知你。

在這些例子中,服務生、商家和銀行都扮演著「代理人」的角色。他們在完成某些工作後通知你。

C/C++ 回調是一種讓函式在完成某些工作後通知另一個函式的技術。回調通常用於事件處理、異步程式設計和其他需要將控制權從一個函式傳遞到另一個函式的情況。

以下是 C/C++ 回調的範例程式:

#include <iostream>
using namespace std;

// 全域變量
static void (*g_callback)(int) = nullptr;

// 另一個檔案
void register_callback(void (*callback)(int)) {
  // 將回調函式指標儲存起來
  g_callback = callback;
}

void call_callback() {
  // 呼叫回調函式
  g_callback(77);
}

// 回調函式
void callback(int data) {
  cout << "回調函式:" << data << endl;
}

// 主函式
int main() {
  // 定義回調函式指標
  void (*pfun)(int) = callback;

  // 在另一個檔案中註冊回調函式指標
  register_callback(pfun);

  // 呼叫另一個檔案中的回調函式
  call_callback();

  return 0;
}

上述程式碼可以直接執行,得到結果:

回調函式:77

這個程式定義了一個名為 callback() 的回調函式,它將傳入的資料印在標準輸出上。主函式中,定義了一個回調函式指標 pfun,並將其指向 callback() 函式。然後,主函式呼叫 register_callback() 函式來註冊回調函式指標 pfun。

在另一個檔案中,定義了 register_callback() 和 call_callback() 兩個函式。register_callback() 函式將回調函式指標儲存起來,call_callback() 函式呼叫回調函式。

在主函式中,呼叫 call_callback() 函式來呼叫回調函式。在回調函式中,將 77 作為參數傳入,並將其印在標準輸出上。

回調函式可以用在許多不同的情況下。它可以用來簡化程式碼,並提高程式的靈活性。

參考:Bard、ChatGPT。

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲