星期一, 3月 13, 2017
[ C ] Callback Function使用
如果在程式裡,使用某個function,叫call function,是主動的行為。
而callback function是被動的,像是某個特定的事件被呼叫到時,
callback function才會被呼叫。
可以想像成,
如果要打電話找某人時,
撥1的話會轉接到A先生,
撥2的話會轉接到B先生,
撥3的話會轉接到C先生,
而不變的是"電話"這台東西永遠是電話,
會變的是你要撥幾號,
等完你撥號後,就會自動接通哪個人。
但要記得你撥的"內容"需要符合電話可以接通的"格式"。
function pointer的定義:
返回類型 (* 函式指標名稱) (參數列表);
int (* GetPointCallback)(int x, int y);
我宣告一個function當例子,
int showMSG(MyID *myid)
當然可以像一般的方式來使用這function,
showMSG(&getID);
但也可以用callback的方式來使用,
先定義一個callback function,回傳一個int值,參數是struct MyID,
int (* CALLBACK)(MyID *);
然後我指定CALLBACK這名字,assign一個function name給他,
CALLBACK = showMSG;
代表我要去使用showMSG這個function。
最後我直接呼叫CALLBACK這個function,那他就會自動連結到showMSG了。
int rel = CALLBACK(&getID);
SourceCode
另外要說的是有其他幾種使用callback function的方法,
第一種是以上說過的方式,
直接宣告給他一個callback的模組,並讓它assign到function內去。
int (*call)(int, int);
call = do_multiply;
第二種是在function用當作參數來使用,
我直接把callback function的宣告當參數放在function內,
然後要使用時,把要用的function name當參數值丟過去,
void redirect_func(int (*call_this)(int, int)){}
redirect_func(do_multiply);
第三種是用typedef的方式來定義callback function的別名,
這種方式和第二種有點像,只是我用typedef的方式,
那我就不用在function參數裡寫那麼多定義了。
typedef int (*call_def)(int, int);
void type_redirect_func(call_def call_this){}
type_redirect_func(do_multiply);
SourceCode 2
Ref
Ref 2
Ref 3
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言