程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何定義和實現一個類的成員函數為回調函數?

如何定義和實現一個類的成員函數為回調函數?

編輯:關於C語言

回調函數就是被調用者回頭調用調用者的函數。

回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用它所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。

使用回調函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回調函數)的地址作為參數傳遞給那個被調用函數。而該被調用函數在需要的時候,利用傳遞的地址調用回調函數。

回調函數,就是由你自己寫的,你需要調用另外一個函數,而這個函數的其中一個參數,就是你的這個回調函數名。這樣,系統在必要的時候,就會調用你寫的回調函數,這樣你就可以在回調函數裡完成你要做的事。

B.如何定義和實現一個類的成員函數為回調函數

要定義和實現一個類的成員函數為回調函數需要做三件事:

a.聲明;

b.定義;

c.設置觸發條件,就是在你的函數中把你的回調函數名作為一個參數,以便系統調用

如:

聲明回調函數類型

typedef void (*FunPtr)(void);

定義回調函數

class A

{

public:

       static void callBackFun(void)   //回調函數,必須聲明為static

       {

……

       }

};

設置觸發條件

void Funtype(FunPtr p)

{

       p();

}

void main(void)

{

       Funtype(A::callBackFun);

}

C.     回調函數與API函數

回調和API非常接近,他們的共性都是跨層調用的函數。但區別是API是低層提供給高層的調用,一般這個函數對高層都是已知的;而回調正好相反,他是高層提供給底層的調用,對於低層他是未知的,必須由高層進行安裝,這個安裝函數其實就是一個低層提供的API,安裝後低層不知道這個回調的名字,但它通過一個函數指針來保存這個回調函數,在需要調用時,只需引用這個函數指針和相關的參數指針。

其實:回調就是該函數寫在高層,低層通過一個函數指針保存這個函數,在某個事件的觸發下,低層通過該函數指針調用高層那個函數。

摘自   何昊專欄 程序員面試500問
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved