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

            CG@CPPBLOG

            /*=========================================*/
            隨筆 - 76, 文章 - 39, 評(píng)論 - 137, 引用 - 0
            數(shù)據(jù)加載中……

            《C++設(shè)計(jì)新思維》讀書筆記(三)


             
            1.5.1 運(yùn)用Template Template參數(shù)實(shí)作Policy Classes

            如前例,庫(kù)代碼host class如果已知policy class,那么可以這樣描述:
            1 
            2 //Library code
            3 template < template < class Created > class CreationPolicy >
            4 class WidgetManager : public CreationPolicy<Widget>{};


            因?yàn)镃reated只是形式引數(shù)(formal argument),不可使用,可以省略如下:
            1 
            2 template < template < class > class CreationPolicy >
            3 class WidgetManager : public CreateionPolicy<Widget>{};


            客戶代碼為:

            1 typedef WidgetManager<OpNewCreator> MyWidgetMgr;


            當(dāng)WidgetManager希望在內(nèi)部以相同的生成策略產(chǎn)生一個(gè)內(nèi)部對(duì)象,那么這種template template形式不可或缺。

            Policy的確能夠帶給WidgetManager非常大的彈性。第一,可以外部變更policies。第二,可以自定義policies。

            WidgetManager的作者可以定義一些常用的policies,以“template 缺省引數(shù)”的方式提供:
            1 
            2 template < template < class > class CreationPolicy = OpNewCreator >
            3 class WidgetManager .


            1.5.2 運(yùn)用Template 成員函數(shù)實(shí)作Policy Classes

            我們可以把先前的Creator policy定義為一個(gè)非模板類,內(nèi)部提供一個(gè)模板成員函數(shù)如下:
             1 
             2 struct OpNewCreator
             3 {
             4      template < class T >
             5      static T* Create()
             6      {
             7             return new T;
             8      }
             9 }
            10 

            這種方式對(duì)舊式編譯期有較佳兼容性。但難以討論、定義、實(shí)作和運(yùn)用。

            1.6 更豐富的Policies

            在前例的Creator policy中PrototypeCreateor除了提供Create()成員函數(shù)外,還提供了GetProtoType和SetProtoType兩個(gè)函數(shù),由于WidgetManager繼承了policy class,所以WidgetManager具有此兩個(gè)接口,雖然它自己并沒有用。

            客戶代碼可以如此:
            1 
            2 typedef WidgetManager<PrototypeCreator> MyWidgetManager;
            3 /////////
            4 widget* pPrototype = ;
            5 MyWidgetManager mgr;
            6 mgr.SetPrototype(pPrototype);


            使用者如果需要擴(kuò)充policies,可以在不影響host class原本功能的前提下,增加接口。“哪個(gè)policy被使用”由使用者決定而非程序庫(kù)自身。policies給與使用者一種能力,在型別安全的前提下擴(kuò)增host class的功能。

             

            posted on 2007-12-17 21:44 cuigang 閱讀(399) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 《C++設(shè)計(jì)新思維》讀書筆記

            久久久久人妻一区二区三区 | 99久久婷婷国产综合亚洲| 蜜桃麻豆WWW久久囤产精品| 人妻无码αv中文字幕久久琪琪布| 久久久www免费人成精品| 国产美女久久精品香蕉69| 97精品国产97久久久久久免费 | 亚洲一本综合久久| 久久有码中文字幕| 无码人妻久久一区二区三区免费丨| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久99精品国产麻豆婷婷| 国产亚洲精久久久久久无码77777| 国产精品美女久久久| 亚洲伊人久久综合中文成人网| 国产V亚洲V天堂无码久久久| 狠狠色综合久久久久尤物| 亚洲精品高清国产一线久久| 久久天天躁狠狠躁夜夜2020老熟妇 | 亚洲AV无码久久精品色欲| 岛国搬运www久久| 久久久噜噜噜久久熟女AA片| 亚洲精品WWW久久久久久| 2020最新久久久视精品爱| 国产毛片欧美毛片久久久| 亚洲伊人久久综合影院| 日本免费久久久久久久网站| 久久夜色精品国产噜噜亚洲AV| 久久人妻AV中文字幕| 久久婷婷午色综合夜啪| 久久精品视屏| 四虎国产精品免费久久5151| 99久久精品日本一区二区免费| 久久精品中文无码资源站| 97香蕉久久夜色精品国产 | 精品久久人人爽天天玩人人妻| 成人综合伊人五月婷久久| 2020久久精品国产免费| 国产成人综合久久综合| 99麻豆久久久国产精品免费| 精品久久久久久国产|