• <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>

            martin

            thinking

            常用鏈接

            統計

            software

            最新評論

            應用的擴展

            實體(語言內建的數據類型,開發者定義的類和方法等)的定義與聲明,實體和指針跟程序設計帶來了不同影響.
            對于實體或定義,編譯器要知道實體真實的物理內存布局,因此讓編譯器知道這些信息,并且在程序編譯完畢后不能更改.要想更改必須重新編譯程序.因此如果在系統設計者程序庫中運用了inline函數,并且如果應用開發者在應用中用了這個inline函數,則當后來要對inline進行修改時,有可能要導致應用被重新編譯.
            對于指針,它的大小在特定的機器上是固定的(在32位機器上,它的大小是32位;在64位機器上,它的大小是64位).因此可以改變它的值,而不需要重新編譯應用,就可以改變應用的功能.

            在面向對象中,可以通過虛函數指針來延遲特定函數的決策,即調用子類的函數.
            在C語言中,我們可以通過函數指針來對函數的功能進行推遲決策.
            在C++中,我們也可以通過函數指針(函數對象)、對象指針來推遲決策,從而使程序的功能更有彈性。例如,在設計模式中的strategy模式中,就是通過在contex中包含一個指向strategy的指針來實現的。我們可以定義一個抽象的strategy接口,然后由各個具體的strategy實現這些接口,從而在保證應用架構幾乎不做任何調整下,實現不同的功能。當然在這種實現方式中,我們應該加入strategy的決議者,由它來裁決采用哪一種策略方式。決議者可以采用配置文件、應用的輸入等作為決議的依據。

            熟悉symbian的人,很快就會發現:它與symbian中的ECOM架構很相似。它要求各種strategy的實現方式被包含在共享的DLL中,并由RLibrary::Loard()調用動態載入.
            使用定義抽象接口,然后在各DLL中定義具體的實現,并且動態載入,我們可以比較容易地實現所謂的插件(plugin)。插件的載入取決于配置,或相應的輸入檢測。

            下面給出在linux和windows上從動態庫中查找和載入的例子:
            #ifdef WIN32
                    HINSTANCE hDll;
                    if(!(hDll = LoadLibrary(VOCALSIP_DLLPATH)))
                    adapter.m_initFunc = (INIT_PROTOSTACK_FUNC)GetProcAddress( hDll, "InitVocalSipStack");
                    adapter.m_createFunc = (CREATE_CHANNEL_FUNC)GetProcAddress( hDll, "CreateVocalSipGCChannel");
                    adapter.m_cleanupFunc = (CLEANUP_PROTOSTACK_FUNC)GetProcAddress( hDll, "CleanupVocalSipStack");
            #else
                    void* h_dl = dlopen(VOCALSIP_DLLPATH,RTLD_NOW | RTLD_GLOBAL);
                    adapter.m_initFunc = (INIT_PROTOSTACK_FUNC)dlsym( h_dl, "InitVocalSipStack");
                    adapter.m_createFunc = (CREATE_CHANNEL_FUNC)dlsym( h_dl, "CreateVocalSipGCChannel");
                    adapter.m_cleanupFunc = (CLEANUP_PROTOSTACK_FUNC)dlsym( h_dl, "CleanupVocalSipStack");
            #endif

            posted on 2009-03-20 11:41 martin_yahoo 閱讀(1283) 評論(0)  編輯 收藏 引用

            26uuu久久五月天| 国产精品久久久久a影院| 精品久久一区二区三区| 精品久久777| 超级97碰碰碰碰久久久久最新| 精品多毛少妇人妻AV免费久久| 久久A级毛片免费观看| 国产精品免费久久久久影院| 国产精品久久久久a影院| 天天爽天天爽天天片a久久网| 亚洲国产天堂久久久久久| 久久久精品人妻一区二区三区四| 久久精品?ⅴ无码中文字幕| 国产亚洲精久久久久久无码77777| AA级片免费看视频久久| 久久精品国产亚洲αv忘忧草 | 国内精品伊人久久久久av一坑 | 久久ww精品w免费人成| 久久久久国产亚洲AV麻豆| 久久人爽人人爽人人片AV| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久亚洲国产最新网站| 日本精品久久久久中文字幕8| 久久久久亚洲精品日久生情| 久久久久亚洲精品无码网址 | 国产精品久久久久jk制服| 久久人人爽人人人人片av| 午夜福利91久久福利| 久久99精品久久久久久秒播| 久久这里只精品国产99热| 亚洲国产成人久久综合一| 91秦先生久久久久久久| 国产精品久久久久久福利漫画| 色综合久久中文字幕无码| 久久婷婷五月综合色奶水99啪 | 精品久久久久久国产| 久久精品久久久久观看99水蜜桃| 久久久久亚洲AV片无码下载蜜桃| 久久久久久久综合狠狠综合| 久久久无码精品亚洲日韩京东传媒 | 久久久久av无码免费网|