• <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ì)新思維》讀書筆記(11)

            2.6 型別選擇

            有時(shí)候,泛型程序需要根據(jù)一個(gè)bool量來選擇某個(gè)型別。

            假如對(duì)NiftyContainer,你需要一個(gè)std::vector作為后端存儲(chǔ)結(jié)構(gòu)。那么可能對(duì)于多態(tài)型別,你不能存儲(chǔ)實(shí)體,只能存儲(chǔ)指針。而對(duì)于非多態(tài)型別,你可以存儲(chǔ)實(shí)體,因?yàn)檫@樣有效率。

            在你的class template中:

            1 template <typename T, bool isPolymorphic>
            2 class NiftyContainer
            3 {
            4     //
            5 };

            你要放一個(gè) vector<T*> 或者 vector<T>。根據(jù)isPolymorphic來定,你可以使用 traits class template 如下:

             1 template <typename T, bool isPolymorphoic>
             2 struct NiftyContainerValueTraits
             3 {
             4     typedef T* ValueType;
             5 };
             6 template <typename T>
             7 struct NiftyContainerValueTraits<T, false>
             8 {
             9     typedef T ValueType;
            10 };
            11 template <typename T, bool isPolymorphic>
            12 class NiftyContainer
            13 {
            14     //
            15     typedef NiftyContainerValueTraits<T, isPolymoriphic> Traits;
            16     typedef typename Traits::ValueType ValueType;
            17     vector<ValueType> vec;
            18 };

            這種方法難用而且沒有復(fù)用性,我們可以這樣做:

             1 template <bool flag, typename T, typename U>
             2 struct Select
             3 {
             4     typedef T Result;
             5 };
             6 template <typename T, typename U>
             7 struct Select<false, T, U>
             8 {
             9     typedef U Result;
            10 };
            11 template <typename T, bool isPolymorphic>
            12 class NiftyContainer
            13 {
            14     //
            15     typedef Select<isPolymorphic, T*, T>::Result ValueType;
            16     vector<ValueType> vec;
            17 };

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

            久久综合视频网站| 日本三级久久网| 国产精品久久久久久久久久影院| 精品国产VA久久久久久久冰| 麻豆亚洲AV永久无码精品久久| 无码任你躁久久久久久老妇App| 久久人妻少妇嫩草AV无码蜜桃| 久久精品国产亚洲7777| 久久播电影网| 久久露脸国产精品| 欧美日韩久久中文字幕| 色妞色综合久久夜夜| 久久精品国产2020| 久久精品国产亚洲av日韩| 97久久精品人妻人人搡人人玩| 久久不射电影网| 日韩亚洲欧美久久久www综合网| 国产午夜精品久久久久九九| 三级片免费观看久久| 婷婷伊人久久大香线蕉AV| 99久久国语露脸精品国产| 99久久综合狠狠综合久久| 久久综合久久性久99毛片| 久久中文字幕人妻丝袜| 久久久精品人妻一区二区三区四| 国内精品久久久久影院免费| 久久久久久无码国产精品中文字幕| 久久夜色精品国产亚洲av| 亚洲av伊人久久综合密臀性色 | 伊人久久综在合线亚洲2019| 99久久精品免费观看国产| 欧美精品九九99久久在观看| 久久精品国产亚洲av高清漫画 | 久久精品国产亚洲av瑜伽| 四虎影视久久久免费| 久久精品国产亚洲av影院| 久久久久无码精品| 久久水蜜桃亚洲av无码精品麻豆| 国产伊人久久| 国产精品久久久久久影院| 婷婷久久综合|