c++ 在類中寫回呼函數

來源:互聯網
上載者:User

標籤:c++   回呼函數   

要注意C ++ 的類的成員函數和一般的C 函數的區別。C + + 類採用this 規則傳遞函數。在使用類的成員函數作為回呼函數,要求該成員函數被聲名為靜態成員函數,並且注意函數聲名的時候要同時聲明好參數路由規則。

簡單的樣本:
CallBackClass.h

#ifndef CALL_BACK_CLASS_H#define CALL_BACK_CLASS_Hclass CallBack{public:    CallBack(){}    ~CallBack(){}    typedef void(*call_back_func)(int);//先聲明函數指標,即我們要調用的函數public:    /*安裝函數指標*/    void call_back( void(*call_back_func)(int),int n ){        call_back_func(n);    }};#endif

這裡聲明及定義寫在了一起是為了方便。

main.cpp

#include <iostream>#include "CallBackClass.h"using namespace std;void func(int n){   //該函數需為全域,或類中的靜態函數    cout<<n<<endl;}int main(){    CallBack a;    a.call_back_func(func,10);}

我們調用對象a的成員函數call_back_func,該函數參數為一個函數指標及一個整型。傳入函數名即將該函數地址傳入,使其調用了func函數。

CallBackTest.h

#ifndef CALL_BACK_TEST_H#define CALL_BACK_TEST_Hclass CallBackTest{public:    CallBackTest(){};    ~CallBackTest(){};    typedef void(*call_back_func)(void*,int);public:    /*綁定對象*/    void call_back(void* pThisObject,void(*call_back_func)(void*,int),int n){        my_Object = pThisObject;        my_func = call_back_func;        my_n = n;    }    void exec_back_func(){        my_func(my_Object,my_n);//這裡將綁定到我們的靜態函數    }private:    call_back_func my_func;    int my_n;    void* my_Object;};#endif

main.cpp

#include <iostream>#include "CallBackTest.h"using namespace std;class Proxy{public:    static void need_call_func(void* pCurObject,int n){        Proxy* pObject = (Proxy*)pCurObject;        pObject->execFunc(n);    }    void Exec(){        CallBackTest callback;        callback.call_back(this,need_call_func,10);        callback.enec_back_func();    }    void execFunc(int n){        cout<<n<<endl;    }};int main(){    Proxy test;    test.Exec();    return 0;}

我們都知道,類的靜態函數由該類的執行個體共用。
而這裡的疑惑點在於,靜態函數的安裝。
1、callback.call_back(this,need_call_func,10);確認某個對象的參數
2、callback.exec_back_func();將我們的參數安裝到靜態函數
3、執行靜態函數內容。

其實描述得不是很好,請各位試著自己理解。
對該程式還不是很清楚的 可通過調試才瞭解程式的執行。

c++ 在類中寫回呼函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.