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

            常用鏈接

            統(tǒng)計(jì)

            software

            最新評(píng)論

            應(yīng)用的擴(kuò)展

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

            在面向?qū)ο笾校梢酝ㄟ^虛函數(shù)指針來延遲特定函數(shù)的決策,即調(diào)用子類的函數(shù).
            在C語言中,我們可以通過函數(shù)指針來對(duì)函數(shù)的功能進(jìn)行推遲決策.
            在C++中,我們也可以通過函數(shù)指針(函數(shù)對(duì)象)、對(duì)象指針來推遲決策,從而使程序的功能更有彈性。例如,在設(shè)計(jì)模式中的strategy模式中,就是通過在contex中包含一個(gè)指向strategy的指針來實(shí)現(xiàn)的。我們可以定義一個(gè)抽象的strategy接口,然后由各個(gè)具體的strategy實(shí)現(xiàn)這些接口,從而在保證應(yīng)用架構(gòu)幾乎不做任何調(diào)整下,實(shí)現(xiàn)不同的功能。當(dāng)然在這種實(shí)現(xiàn)方式中,我們應(yīng)該加入strategy的決議者,由它來裁決采用哪一種策略方式。決議者可以采用配置文件、應(yīng)用的輸入等作為決議的依據(jù)。

            熟悉symbian的人,很快就會(huì)發(fā)現(xiàn):它與symbian中的ECOM架構(gòu)很相似。它要求各種strategy的實(shí)現(xiàn)方式被包含在共享的DLL中,并由RLibrary::Loard()調(diào)用動(dòng)態(tài)載入.
            使用定義抽象接口,然后在各DLL中定義具體的實(shí)現(xiàn),并且動(dòng)態(tài)載入,我們可以比較容易地實(shí)現(xiàn)所謂的插件(plugin)。插件的載入取決于配置,或相應(yīng)的輸入檢測(cè)。

            下面給出在linux和windows上從動(dòng)態(tài)庫中查找和載入的例子:
            #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 閱讀(1293) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲AV日韩AV天堂久久| 国产精品熟女福利久久AV| 久久久无码人妻精品无码| 青青草国产精品久久久久| 久久久国产精华液| 亚洲成人精品久久| 久久精品黄AA片一区二区三区| 久久人人爽人人爽人人片AV不| 久久久无码精品亚洲日韩蜜臀浪潮| 7777久久久国产精品消防器材| 久久久网中文字幕| 国内精品免费久久影院| 国产精品久久久久久久久鸭| 色婷婷久久综合中文久久蜜桃av| 久久久久久免费一区二区三区| 亚洲国产综合久久天堂 | 亚洲欧美日韩精品久久亚洲区| 久久人妻少妇嫩草AV蜜桃| 久久亚洲国产午夜精品理论片| 亚洲人成网站999久久久综合 | 国产成人综合久久精品尤物| 久久久亚洲AV波多野结衣| 欧美与黑人午夜性猛交久久久| 91精品国产91久久久久久| 亚洲色大成网站WWW久久九九| 激情综合色综合久久综合| 国产精品美女久久久| 欧美精品国产综合久久| 国产69精品久久久久久人妻精品| 国产精品免费久久| 久久精品国产精品亚洲精品| 夜夜亚洲天天久久| 国产精品va久久久久久久| 狠色狠色狠狠色综合久久| 麻豆AV一区二区三区久久| 中文字幕乱码久久午夜| 亚洲精品国精品久久99热一| 无码日韩人妻精品久久蜜桃| 久久棈精品久久久久久噜噜| av色综合久久天堂av色综合在| 亚洲精品无码久久一线|