回調函數

編程中的回調

    軟件模塊之間總是存在一些接口,從調用方式上分三種:

    1. 同步調用:

        阻塞式調用,要等對方調用完畢後再調用;

    2.異步調用:

        類似於消息或事件,接口在接收到某種消息或發生某種事件時主動去通知調用方;

    3.雙向調用:

        被調用接口在被調用時也會調用對方的接口;


    雙向調用機制就是回調機制。其實現方式分兩種:

        1.結構化編程:

            通過回調函數實現。回調函數由調用方自己實現,供調用方使用;

        2.面向對象的編程:

            通過接口或者抽象類,用虛函數實現。即類A調用類B,類B又調用類A的某個方法;


    本文主要講回調函數的實現:

        1.回調函數:

            就是通過函數指針調用的函數。回調函數由自己實現,回調函數的指針作爲參數傳給另一個函數,當這個指針被用來調用函數時,就可以通過我們自己實現的回調函數實現一些功能。

            回調函數不是由函數實現方直接調用的,而是在特定的時候由另一方調用的。

        2.實現機制

            1) :先定義一個函數

            2) :自己實現這個函數(即回調函數),並且將此函數指針做爲參數傳遞給調用者。

            3) :當滿足特定條件時,調用方通過函數指針調用回調函數對事件進行處理。

        3.回調函數示例

 Node* Search (Node* node ,int (*compare)(void const * ,void const *),void const* value )
{
      while (node != NULL)
    {
       if (compare ( node->value ,value ) == 1)
            { 
                return node; 
            } 
       else  
            {    
                node = node->next; 
             }
    } 
}


       此處,compare函數就是回調函數,我們可以在回調函數中實現 int 、 float 、string 的比較,而當Search需要時可以傳入其中一個的地址,與給定的value進行比較。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章