Callback Function
C++ 的 callback funcation 筆記記錄:
callback 給我的感覺上像是定義了一個介面, 再由其他人(也就是使用的人)去實做這個介面.
這麼說好了,假設A是一個負責接收資料的類別,但是接收完資料後呢?該怎麼處理資料就不是A所該負責的(因為他只負責接受)。是要由使用A這個接收資料的人來做決定該如何處理,那問題來了,當A接收到資料後,要怎麼去通知使用A的人呢? 這時候就可以藉由 callback 來達到這樣的目的。
B君: 叫A進來
A君:我進來了.
B君:A君, 你開始接收資料
(此時B君就離開了)
(當A君接收到資料後…)
A君:執行接收到資料的方法(此方法是由B君時做出來的)
情況大致上就像這樣!!若以程式碼來表示:
A君的內容:
1: #pragma once
2: #include <string>
3:
4: typedef void(*ReceivedDataMethod)(std::string);
5:
6: class A君
7: {
8: public:
9: A君(ReceivedDataMethod func){
10: this->gotMessageFunc = func;
11: }
12:
13: ~A君(void){
14: this->gotMessageFunc = NULL;
15: }
16:
17: // 假設 A 君收到資料後會自己呼叫這個 ReceiveMessage method.
18: // 不過,這個 method 實際上的執行內容不是A君所建立的
19: // 是再新增A君時由外部所給予的
20: void ReceiveMessage(std::string message){
21: gotMessageFunc(message);
22: }
23:
24: private:
25: ReceivedDataMethod gotMessageFunc;
26: };
27:
使用A君:
1: #include <Windows.h>
2: #include <iostream>
3: #include "A君.h"
4:
5: // implement
6: void OnReceived(std::string message){
7: std::cout << "You got message " << message << std::endl;
8: }
9:
10: //func: callback method
11: void noRepeat(display_func func){
12: func(100); // 調用 callback
13: }
14:
15: int main(int argc, char* argv[]){
16: // OnReceived 正好是實做A君的 ReceivedDataMethod
17: A君 myClass(OnReceived);
18: // 當A君呼叫 RecevieMessage 時,實際上就是執行 OnReceived 這個 Method
19: myClass.ReceiveMessage("Start!!");
20:
21: getchar();
22: return 0;
23: }