• <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, 評論 - 137, 引用 - 0
            數據加載中……

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


             
            1.5.1 運用Template Template參數實作Policy Classes

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


            因為Created只是形式引數(formal argument),不可使用,可以省略如下:
            1 
            2 template < template < class > class CreationPolicy >
            3 class WidgetManager : public CreateionPolicy<Widget>{};


            客戶代碼為:

            1 typedef WidgetManager<OpNewCreator> MyWidgetMgr;


            當WidgetManager希望在內部以相同的生成策略產生一個內部對象,那么這種template template形式不可或缺。

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

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


            1.5.2 運用Template 成員函數實作Policy Classes

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

            這種方式對舊式編譯期有較佳兼容性。但難以討論、定義、實作和運用。

            1.6 更豐富的Policies

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

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


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

             

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

            久久亚洲春色中文字幕久久久| 精品久久久久久久久久中文字幕| 少妇被又大又粗又爽毛片久久黑人| 久久久青草青青亚洲国产免观| 午夜不卡久久精品无码免费| 久久精品国产亚洲av麻豆蜜芽| 中文字幕无码精品亚洲资源网久久| 久久亚洲国产精品成人AV秋霞| 久久久久99这里有精品10 | 久久久久久精品久久久久| 久久免费视频1| 精品久久久久久无码专区| 久久精品成人免费看| 中文字幕成人精品久久不卡| 久久久久国色AV免费看图片| 午夜视频久久久久一区 | 97久久精品无码一区二区| 91麻豆精品国产91久久久久久| 国产精品伊人久久伊人电影| 伊人情人综合成人久久网小说| 亚洲综合伊人久久综合| 国内精品久久久久影院免费| 久久青青草原国产精品免费| 久久免费国产精品| 国产亚洲美女精品久久久2020| 久久精品毛片免费观看| 久久国产影院| 人妻无码久久一区二区三区免费| 久久精品国产免费| 偷窥少妇久久久久久久久| 久久精品国内一区二区三区| 久久无码专区国产精品发布| 久久久综合九色合综国产| 一本一道久久综合狠狠老| 99久久夜色精品国产网站| 狠狠综合久久综合88亚洲 | 99久久做夜夜爱天天做精品| 国产成人精品白浆久久69| 久久精品国产99久久久古代| 久久久精品视频免费观看| 久久人人爽人人爽人人片AV不|