• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            focus on linux, c/c++, lua

            函數指針調用類的成員函數

            今天在模塊中為了避免重復代碼,以及方便以后的擴展,我決定用函數指針來管理所有相同功能的函數,由于底層函數的接口寫死了,也只能這么做了。大概如下:

            class CWndEquipDye : public CEquipRebuilderWnd
            {
            typedef void(*SLIDEFUN)(DWORD);
            friend CEquipRebMgrListener;
            public:
            CWndEquipDye ();
            virtual ~CWndEquipDye() {};
            public:
            virtual BOOL Create(IResObject *pResCript);
            virtual void OnPaint(ICanvas* pCanvas);
            public:
            //////////////////////////////////////////////////////////////////////////
            // @Description: 更新當前角色形象
            // @Input Para: NONE
            // @Return Value: NONE
            //////////////////////////////////////////////////////////////////////////
            void RefreshPreview();
            //////////////////////////////////////////////////////////////////////////
            // @Description: 拖動顏色滾動條的回調函數,紅 綠 藍
            // @Input Para: dwParam->控件傳遞的值
            // @Return Value:NONE
            //////////////////////////////////////////////////////////////////////////
            void OnSlideRedPosChange(DWORD dwParam);
            void OnSlideGreenPosChange(DWORD dwParam);
            void OnSlideBluePosChange(DWORD dwParam);
            private:
            enum SLIDE
            {
               SLIDE_RED = 0,
               SLIDE_GREEN,
               SLIDE_BLUE,
               SLIDE_MAX,
            };
            DWORD m_dwSlideValue[SLIDE_MAX];
            XSlideBar* m_pSlideBar[SLIDE_MAX];
            SLIDEFUN m_arrSlideFun[SLIDE_MAX];
            };

            m_arrSlideFun[0] = OnSlideRedPosChange;
            m_arrSlideFun[1] = OnSlideRedPosChange;
            m_arrSlideFun[2] = OnSlideRedPosChange;

            但是在這兒初始化的時候,報錯:error C2440: '=' : cannot convert from 'void (__thiscall CWndEquipDye::*)(unsigned long)' to 'void (__cdecl *)(unsigned long)'
                    There is no context in which this conversion is possible

            立馬google,后來才明白是:在C++中,成員函數的指針是個比較特殊的東西。對普通的函數指針來說,可以視為一個地址,在需要的時候可以任意轉換并直接調用。但對成員函數來說,常規類型轉換是通不過編譯的,調用的時候也必須采用特殊的語法。C++專門為成員指針準備了三個運算符: "::*"用于指針的聲明,而"->*"和".*"用來調用指針指向的函數。

            原文如下:http://www.vckbase.com/document/viewdoc/?id=1818

            這篇文章寫的很好,還初步介紹了Delegate委托的概念,又讓自己長了不少見識。還有一篇比較好的文章,先貼在這里http://www.codeproject.com/KB/cpp/FastDelegate.aspx有時間好好看看。

            BTW:晚上準備和MM一起去歡樂谷玩,特留貼紀念這個不是光棍的光棍節!

            posted on 2010-10-20 10:27 zuhd 閱讀(862) 評論(0)  編輯 收藏 引用 所屬分類: c/c++

            www亚洲欲色成人久久精品| 青青热久久国产久精品 | 亚洲午夜福利精品久久| 久久午夜无码鲁丝片秋霞| MM131亚洲国产美女久久| 国内精品久久久久影院网站| 奇米影视7777久久精品人人爽| 久久亚洲AV成人无码国产| 久久久久久久国产免费看| 亚洲伊人久久精品影院| 66精品综合久久久久久久| 精品久久久久久国产| 国产精品熟女福利久久AV| 久久天天躁狠狠躁夜夜96流白浆 | 色综合久久88色综合天天| 热RE99久久精品国产66热| 精品久久一区二区| 久久人人爽人人人人片av| 久久婷婷五月综合色99啪ak| 精品综合久久久久久888蜜芽| 三级韩国一区久久二区综合| 亚洲成色999久久网站| 天天躁日日躁狠狠久久| 伊人久久大香线蕉精品不卡| 久久久精品波多野结衣| 91精品日韩人妻无码久久不卡 | 亚洲国产精品久久久久婷婷软件| 久久婷婷色综合一区二区| 国产精品99久久久久久猫咪| 久久精品亚洲精品国产色婷| 人妻无码中文久久久久专区| 久久人人爽人人爽人人片AV麻烦 | 精品熟女少妇a∨免费久久| 伊人久久精品无码av一区| 香蕉aa三级久久毛片| 亚洲另类欧美综合久久图片区| 久久久久婷婷| 久久综合九色欧美综合狠狠| 亚洲欧洲久久av| 国产亚洲精久久久久久无码77777| 狠狠色丁香婷婷久久综合|