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

            2.10.2 偵測(cè)基本型別(略)'
            2.10.3
            優(yōu)化的參數(shù)型別(略)
            2.10.4 卸除飾詞

            下面是一個(gè)“const 卸除器

             1 template<typename T>
             2 class TypeTraits
             3 {
             4 private:
             5     template<class U> struct UnConst
             6     {
             7         typedef U Result;
             8     };
             9     template<class U> struct UnConst<const U>
            10     {
            11         typedef U Result;
            12     };
            13 public:
            14     typedef UnConst<T>::Result NonConstType;
            15 };

            2.10.5 運(yùn)用TypeTraits

            這里實(shí)作一個(gè)調(diào)用BitBlast的例子: 

             1 enum CopyAlgoSelector{Conservative, Fast};
             2 
             3 // Conservative routine-works for any type
             4 template <typename InIt, typename OutIt>
             5 OutIt CopyImpl(InIt first, InIt last, OutIt result, Int2Type<Conservative>)
             6 {
             7     for(; first != last; ++first, ++result)
             8         *result = *first;
             9 }
            10 
            11 // Fast routine-works only for pointers to raw data
            12 template <typename InIt, typename OutIt>
            13 OutIt CopyImpl(InIt first, InIt last, OutIt result, Int2Type<Fast>)
            14 {
            15     const size_t n = last - first;
            16     BitBlast(first, result, n * sizeof(*first));
            17     return result + n;
            18 }
            19 
            20 template<typename T> struct SupportsBitwiseCopy
            21 {
            22     enum{result = TypeTraits<T>::isStdFundamental};
            23 }
            24 
            25 template <typename InIt, typename OutIt>
            26 OutIt Copy(InIt first, InIt last, OutIt result)
            27 {
            28     typedef TypeTraits<InIt>::PointeeType SrcPointee;
            29     typedef TypeTraits<OutIt>::PointeeType DestPointee;
            30     enum { copyAlgo =
            31         TypeTraits<InIt>::IsPointer &&
            32         TypeTraits<OutIt>::IsPointer &&
            33         SupportsBitwiseCopy<SrcPointee>::result &&
            34         SupportsBitwiseCopy<DestPointee>::result &&
            35         sizeof(SrcPointee) == sizeof(DestPointee) };
            36     return CopyImpl(first, last, Int2Type<useBitBlast>);
            37 }

            對(duì)于一個(gè)POD結(jié)構(gòu)(plain old data),即C struct,只有數(shù)據(jù)沒有其它任何東西。因?yàn)闊o法甄別其類型,會(huì)調(diào)用慢速版本。我們可以這樣做,讓它調(diào)用快速版本,假如POD結(jié)構(gòu)為Mytype

            1 template<> struct SupportsBitwiseCopy<MyTyee>
            2 {
            3     enum {result = true};
            4 };

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

            久久精品国产亚洲AV不卡| 亚洲国产欧美国产综合久久| 久久精品人人做人人爽电影蜜月| 久久久久99这里有精品10| 中文字幕人妻色偷偷久久| 日韩人妻无码精品久久久不卡 | 欧美久久综合九色综合| 一本一道久久精品综合| 久久99精品国产麻豆不卡| 精品多毛少妇人妻AV免费久久 | 国产日韩久久免费影院| 一级女性全黄久久生活片免费| 精产国品久久一二三产区区别| 久久国产精品99国产精| 久久影院亚洲一区| 久久99精品国产99久久| 中文字幕无码久久久| 国产日韩久久久精品影院首页 | 国产V综合V亚洲欧美久久| 天天综合久久一二三区| 国产精品久久久久影视不卡| 国产精品一区二区久久精品涩爱| 日本福利片国产午夜久久| 久久AV无码精品人妻糸列| 精品国产综合区久久久久久| 国产成人精品久久一区二区三区| 奇米影视7777久久精品人人爽| 狠狠色伊人久久精品综合网 | 99久久精品费精品国产| 久久无码人妻一区二区三区 | 精品国产一区二区三区久久| 亚洲伊人久久大香线蕉综合图片 | 久久棈精品久久久久久噜噜| 亚洲精品99久久久久中文字幕 | 久久婷婷五月综合国产尤物app| 久久久久久极精品久久久| 91久久精品国产成人久久| 欧美一区二区精品久久| 好久久免费视频高清| AA级片免费看视频久久| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 |