C++中回調(diào)函數(shù)使用的變身大法

字號(hào):

界面處理類 CShowGUI,數(shù)據(jù)上傳類 CUploadData
    class CUploadData
    {
    ......
    typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
    int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
    // 接受外界出入的參數(shù),主要是回調(diào)函數(shù)的地址通過參數(shù)Caller,
    int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
    ...... // 注意此時(shí)不在需要GetCurState 函數(shù)了 。
    }
    class CShowGUI: public CDialog
    {
    .......
    typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
    void SetCallBack(LPCTSTR strPath);
    static int GetCurState(int nCurData, int nInAll, void * pParam) ;
    CUploadData m_Uploa
    d ; // 數(shù)據(jù)上傳類是界面顯示類的一個(gè)成員變量。
    .......
    }
    void CShowGUI :: SetCallBack(LPCTSTR strPath)
    {
    CUploadData myUploadData ;
    SetUploadCaller myCaller; // 聲明一個(gè)函數(shù)指針變量
    myCaller = CurState ; // 取得界面處理函數(shù)的地址
    myUploadData .UploadFile(strPath,this,myCaller); // 界面處理類的函數(shù)傳入,實(shí)現(xiàn)了數(shù)據(jù)傳入與界面處理的分離 .
    }
    通過上面的演示做到了界面與數(shù)據(jù)的分離,回調(diào)函數(shù)分別扮演了不同角色,所以隨著處理問題的不同應(yīng)靈活應(yīng)用,但同樣因?yàn)樘幚頂?shù)據(jù)類不知道界面處理類或外部調(diào)用類的類型,而更無法靈活地處理界面的不同顯示方式。這方面還希望喜歡鉆研技術(shù)的朋友繼續(xù)研究。
    界面處理類 CShowGUI,數(shù)據(jù)上傳類 CUploadData
    class CUploadData
    {
    ......
    typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
    int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
    // 接受外界出入的參數(shù),主要是回調(diào)函數(shù)的地址通過參數(shù)Caller,
    int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
    ...... // 注意此時(shí)不在需要GetCurState 函數(shù)了 。
    }
    class CShowGUI: public CDialog
    {
    .......
    typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
    void SetCallBack(LPCTSTR strPath);
    static int GetCurState(int nCurData, int nInAll, void * pParam) ;
    CUploadData m_Uploa
    d ; // 數(shù)據(jù)上傳類是界面顯示類的一個(gè)成員變量。
    .......
    }
    void CShowGUI :: SetCallBack(LPCTSTR strPath)
    {
    CUploadData myUploadData ;
    SetUploadCaller myCaller; // 聲明一個(gè)函數(shù)指針變量
    myCaller = CurState ; // 取得界面處理函數(shù)的地址
    myUploadData .UploadFile(strPath,this,myCaller); // 界面處理類的函數(shù)傳入,實(shí)現(xiàn)了數(shù)據(jù)傳入與界面處理的分離 .
    }
    通過上面的演示做到了界面與數(shù)據(jù)的分離,回調(diào)函數(shù)分別扮演了不同角色,所以隨著處理問題的不同應(yīng)靈活應(yīng)用,但同樣因?yàn)樘幚頂?shù)據(jù)類不知道界面處理類或外部調(diào)用類的類型,而更無法靈活地處理界面的不同顯示方式。這方面還希望喜歡鉆研技術(shù)的朋友繼續(xù)研究