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

            爱做久久久久久| 久久人妻少妇嫩草AV无码专区| 一本久久a久久精品综合夜夜| 94久久国产乱子伦精品免费| 午夜精品久久影院蜜桃| 久久综合久久自在自线精品自| segui久久国产精品| 久久久久久久人妻无码中文字幕爆| 亚洲一本综合久久| 漂亮人妻被黑人久久精品| 久久亚洲精品无码播放| 久久久久久久久无码精品亚洲日韩 | 久久久久免费精品国产| 久久国产精品久久精品国产| 久久中文字幕人妻丝袜| 香蕉久久一区二区不卡无毒影院 | 色婷婷久久综合中文久久一本| 性欧美大战久久久久久久久| 久久精品综合一区二区三区| 精品蜜臀久久久久99网站| 久久99热这里只有精品66| 久久久精品波多野结衣| 中文字幕无码免费久久| 欧洲人妻丰满av无码久久不卡| 九九久久精品无码专区| 91久久福利国产成人精品| 99热成人精品热久久669| 伊人久久无码中文字幕| 日韩久久无码免费毛片软件| 国产亚洲成人久久| 久久久久久久亚洲精品| 久久精品国产色蜜蜜麻豆| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲国产精品无码久久久秋霞2 | 国产精品久久久久a影院| 女同久久| 18禁黄久久久AAA片| 久久精品国产免费观看| 亚洲中文字幕无码久久2020| 三上悠亚久久精品| 精品一区二区久久久久久久网站|