什麼叫做 callback function ?
一般來說 callback function 有兩大特徵
1. callback function 是 programmer 寫的
2. callback function 多半不是給programmer 呼叫的
這不是很奇怪嗎 ?
function 是programmer寫的
但是卻不是給 programmer 自己用的
對啊
所以才叫做callback(回呼) function
那是誰會呼叫呢 ?
多半是給系統
或者是其他人的函式庫(也可能是 System library. )
那別人的 function
如何知道呼叫 programmer 所實做的 function 呢?
這個簡單
看宣告寫就可以拉
那邊會用到呢 ?
舉個例子吧
排序 !!
一般C++ 函式庫都有實做排序
要排一個陣列
如果是一個物件陣列
系統函式庫知道排序演算法
但是怎麼知道兩個物件怎麼比大小 ?
這個時候要 RD 實做一個比較物件大小的 function
把 function pointer 傳給演算法
請看下面 C++ 函式庫內建的快速排序宣告
1 2 3 4 5 6 7 | void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)); ////////////////////////// //其中 ////////////////////////// int (*compar)(const void*,const void*)); |
就是 programmer 要實做比較的演算法
實做
1 2 3 4 5 6 | int compare (const void * a, const void * b) { if ( *(I_am_Type*)a < *(I_am_Type*)b ) return -1; // 左邊小, return -1 if ( *(I_am_Type*)a == *(I_am_Type*)b ) return 0; // 相等 , return 0. if ( *(I_am_Type*)a > *(I_am_Type*)b ) return 1; //右邊小 , return 1. } |
在比較大小的時候
qsort() 會呼叫 programmer 實做的 compare()
並且傳入 (void *)的值
讓 programmer 去決定誰大誰小
下面是程式範例
compare() 被當成參數傳入 qsort() 裡面
一旦 qsort 有要比較大小
則 callback 我們宣告的 compare()
qsort() 本身只負責排序演算法的部分囉
沒有留言:
張貼留言