青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  1 #ifndef TYPE_LISTS_H_
  2 #define TYPE_LISTS_H_
  3 
  4 
  5 #include <iostream>
  6 #include <string>
  7 #include "typetraits.h"
  8 
  9 /*
 10 TypeLists 內部沒有任何數值(value),他們的實體是空的,不含有任何狀態,也未定義任何函數。
 11 執行期間TypeLists也不帶任何數值,他們存在的理由只是為了攜帶型別信息。TypeLists 并未打算被具
 12 現化。因此,當我們說“a TypeListL”,實際指的是一個typelist型別,不是一個typelist 對象。
 13 規定 typelist 必須以NullType(類)結尾,NullType可被視為一個結束符號,類似于c字符串的\0功能,
 14 定義一個只有一個元素的typelist如下:
 15 typedef Typelist<int,NullType> OneTypeOnly.
 16 */
 17 template<class T,class U>
 18 struct Typelist
 19 {
 20     typedef T Head;
 21     typedef U Tail;
 22 };
 23 //通過定義宏 將typelist線性化
 24 #define TYPELIST_0() NullType
 25 #define TYPELIST_1(T1) Typelist<T1,TYPELIST_0()>
 26 #define TYPELIST_2(T1,T2) Typelist<T1,TYPELIST_1(T2)>
 27 #define TYPELIST_3(T1,T2,T3) Typelist<T1,TYPELIST_2(T2,T3)>
 28 #define TYPELIST_4(T1,T2,T3,T4) Typelist<T1,TYPELIST_3(T2,T3,T4)>
 29 #define TYPELIST_5(T1,T2,T3,T4,T5) Typelist<T1,TYPELIST_4(T2,T3,T4,T5)>
 30 
 31 //計算TypeList長度
 32 //大多數Typelist的操作都是基于遞歸,遞歸終止條件通過模板特化實現。
 33 template<class TList>struct Length;
 34 template<>struct Length<NullType>//Length的全特化,即,只匹配NullType。
 35 {
 36     enum{value = 0};
 37 };
 38 template<class T,class U>
 39 struct Length<Typelist<T,U> >//Length的扁特化,可匹配任何TypeList<T,U>類型,包括U同時也是Typelist的復合情況。
 40 {
 41     enum{value = 1+Length<U>::value};
 42 };
 43 //2 索引式訪問
 44 template <class TList,unsigned int index> struct TypeAt;
 45 template<class Head,class Tail>
 46 struct TypeAt<Typelist<Head,Tail>,0>
 47 {
 48     typedef Head Result;
 49 };
 50 template<class Head,class Tail,unsigned int i>
 51 struct TypeAt<Typelist<Head,Tail> ,i>
 52 {
 53     typedef typename TypeAt<Tail,i-1>::Result Result;
 54 };
 55 
 56 //類似TypeAt功能,不過TypeAtNonStrict對逾界訪問更加寬容。
 57 //比如TypeList的個數是3,那么你不能使用TypeAt<TL3,3>::Result,這樣會編譯錯誤。
 58 //但是TypeAtNonStrict<TL3,3,NullType>::Result可以,如果不存在索引為3的type,那么結果是第三個引數即NullType
 59 template <class TList, unsigned int i, typename DefType = NullType>
 60 struct TypeAtNonStrict
 61 {
 62     typedef DefType Result;
 63 };
 64 template <class T, class U, typename DefType>
 65 struct TypeAtNonStrict< Typelist<T, U>0, DefType >
 66 {
 67     typedef T Result;
 68 };
 69 template <class T, class U, unsigned int i, typename DefType>
 70 struct TypeAtNonStrict< Typelist<T, U>, i, DefType >
 71 {
 72     typedef typename TypeAtNonStrict<U, i - 1, DefType>::Result Result;
 73 };
 74 
 75 //3 查找TypeList
 76 template<class TList,class T> struct IndexOf;//聲明
 77 template<class T>
 78 struct IndexOf<NullType,T>//如果TList為NullType,那么令value = -1;
 79 {
 80     enum{value = -1};
 81 };
 82 template<class Tail,class T>
 83 struct IndexOf<Typelist<T,Tail> ,T>//如果T是TList中的頭端,那么令value= 0;
 84 {
 85     enum{value = 0};
 86 };
 87 template<class Head,class Tail,class T>//將IndexOf施于TList尾端和T,并將結果置于一個臨時變量temp
 88 struct IndexOf<Typelist<Head,Tail> ,T>//如果temp為-1,令value為-1,否則令value為1+temp
 89 {
 90 private:
 91     enum{temp = IndexOf<Tail,T>::value};//temp要先于value聲明定義。
 92 public:
 93     enum{value = temp == -1 ? -1 : temp + 1};
 94 };
 95 
 96 //4 附加元素到typelist
 97 template <class Tlist,class T>struct Append;//聲明
 98 template<>struct Append<NullType,NullType>//如果TList是NULL而且T是NULL,那么令Result為NullType
 99 {
100     typedef NullType Result;
101 };
102 template <class T> struct Append<NullType,T> //如果TList是NullType,且T是type(非typelist),
103 {                                           //那么Result將是"只含有唯一元素的T";
104     typedef TYPELIST_1(T) Result;
105 };
106 template <class Head,class Tail>
107 struct Append<NullType,Typelist<Head,Tail> >// 如果TList是NullType,且T是一個typelist,那么Result便是T本身
108 {
109     typedef Typelist<Head,Tail> Result;
110 };
111 template<class Head,class Tail,class T>//否則,如果Tlist是non-null,那么result將是個typelist,以TList::Head
112 struct Append<Typelist<Head,Tail>,T>   //為起頭端,并以T附加到TList::Tail的結果為其尾端。
113 {
114     typedef Typelist<Head,typename Append<Tail,T>::Result> Result;
115 };
116 
117 //5 Reverse
118 template <class TList> struct Reverse;
119 template <>struct Reverse<NullType>
120 {
121     typedef NullType Result;
122 };
123 template <class Head, class Tail>
124 struct Reverse< Typelist<Head, Tail> >
125 {
126     typedef typename Append<
127         typename Reverse<Tail>::Result, Head>::Result Result;
128 };
129 
130 
131 #endif
132 
 1 void typelists_test()
 2 {
 3     typedef TYPELIST_0() TL0;
 4     typedef TYPELIST_3(char,int,double) TL3;
 5     typedef TYPELIST_3(char,int,double) TL3_1;
 6     //Length
 7     std::cout<<Length<TL0>::value<<std::endl;
 8     std::cout<<Length<TL3>::value<<std::endl;
 9 
10     //TypeAt
11     typedef TypeAt<TL3,0>::Result Parm1;
12     typedef TypeAt<TL3,1>::Result Parm2;
13     typedef TypeAt<TL3,2>::Result Parm3;
14 
15     typedef TypeAtNonStrict<TL3,3,EmptyType>::Result TEST_TYPE;
16 
17     std::cout<<"Parm1 Type:"<<typeid(Parm1).name() <<" sizeof : "<< sizeof(Parm1)<<std::endl;
18     std::cout<<"Parm2 Type:"<<typeid(Parm2).name() <<" sizeof : "<< sizeof(Parm2)<<std::endl;
19     std::cout<<"Parm3 Type:"<<typeid(Parm3).name() <<" sizeof : "<< sizeof(Parm3)<<std::endl;
20     std::cout<<"TEST_TYPE Type:"<<typeid(TEST_TYPE).name() <<" sizeof : "<< sizeof(TEST_TYPE)<<std::endl;
21 
22     //IndexOf
23     std::cout<<"char indexof TL3 :"<<IndexOf<TL3,char>::value<<std::endl;
24     std::cout<<"int indexof TL3 :"<<IndexOf<TL3,int>::value<<std::endl;
25     std::cout<<"float indexof TL3 :"<<IndexOf<TL3,float>::value<<std::endl;
26 
27     //Append 
28     typedef Append<TL3,int> TL4;//TL4不是一個TypeList
29     typedef Append<TL3_1,TYPELIST_2(float,double)> TL5;
30     std::cout<<"TL4 Length  :"<<Length<TL4::Result>::value<<std::endl;
31     std::cout<<"TL5 Length  :"<<Length<TL5::Result>::value<<std::endl;
32 
33     //Reverse
34     std::cout<<"Reverse result:"<<typeid(Reverse<TL3>::Result).name()<<std::endl;
35 }

轉載
http://blog.csdn.net/zhuyingqingfen/article/details/43938713

寫的非常詳細
posted on 2015-09-16 22:11 arrow8209 閱讀(2820) 評論(2)  編輯 收藏 引用
評論
  • # re: c++ 泛型編程 之 TypeLists
    春秋十二月
    Posted @ 2015-09-16 23:40
    這是loki中的實現。。。  回復  更多評論   
  • # re: c++ 泛型編程 之 TypeLists [未登錄]
    arrow8209
    Posted @ 2015-10-07 23:06
    是的。只是加了中文注釋,和樣例@春秋十二月
      回復  更多評論   

統計

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久亚洲综合| 亚洲综合色丁香婷婷六月图片| 久久久夜夜夜| 一区二区视频免费完整版观看| 国产精品久久久久久久午夜片| 老司机免费视频一区二区| 久久精品系列| 久久夜色精品国产欧美乱| 久久久久成人精品免费播放动漫| 久久久久久香蕉网| 欧美大尺度在线| 欧美日韩一区二区三区四区五区 | 亚洲二区视频| 最新高清无码专区| 一区二区av| 久久精品人人做人人综合| 免费久久精品视频| 国产精品白丝jk黑袜喷水| 国产亚洲一本大道中文在线| 亚洲激情国产精品| 亚洲免费一区二区| 久久亚裔精品欧美| 99视频一区二区| 久久久久久97三级| 国产精品久久久对白| 亚洲福利视频一区| 午夜国产不卡在线观看视频| 久久伊人精品天天| 99视频一区二区三区| 久久久久久亚洲精品中文字幕| 欧美三级欧美一级| 在线视频观看日韩| 久久aⅴ国产欧美74aaa| 日韩午夜免费视频| 欧美本精品男人aⅴ天堂| 国产视频久久久久久久| 亚洲午夜久久久| 亚洲国产天堂久久综合| 久久av老司机精品网站导航| 欧美性视频网站| 国产精品a级| 欧美成人自拍| 欧美午夜免费电影| 亚洲国产高清自拍| 欧美在线国产| 一本大道久久a久久综合婷婷 | 欧美激情第三页| 尤物在线观看一区| 性欧美大战久久久久久久免费观看| 亚洲成人自拍视频| 欧美中文字幕在线播放| 国产精品一区二区久久国产| 亚洲视频在线播放| 一区二区三区视频在线看| 午夜精品av| 亚洲卡通欧美制服中文| 欧美成人免费网| 亚洲国产精品久久91精品| 久久人人爽国产| 久久精品中文| 在线观看成人网| 欧美va天堂va视频va在线| 久久精品国产成人| 极品少妇一区二区三区| 久久中文欧美| 老司机精品视频一区二区三区| 一区二区三区在线高清| 欧美成人一区二区三区在线观看 | 欧美午夜三级| 亚洲制服av| 亚洲免费在线视频一区 二区| 国产精品亚洲网站| 久久精品国产在热久久| 久久性色av| 亚洲美女在线看| 亚洲少妇自拍| 在线成人激情| 亚洲国产精品久久久久婷婷884| 欧美国产日韩一区二区三区| 夜色激情一区二区| 亚洲女人天堂成人av在线| 国产一区二区三区久久精品| 美女在线一区二区| 欧美激情精品久久久久久蜜臀| 在线午夜精品自拍| 亚洲欧美视频在线观看视频| 尤物yw午夜国产精品视频| 亚洲黄色av一区| 国产伦精品一区二区三区视频黑人| 久久午夜国产精品| 欧美屁股在线| 久久久久久久久伊人| 欧美成人高清| 久久九九国产精品| 欧美人体xx| 麻豆91精品| 国产精品日韩在线观看| 欧美激情中文字幕乱码免费| 国产精品电影网站| 欧美成人亚洲| 国产视频在线一区二区| 亚洲国产视频直播| 国产主播精品在线| av成人国产| 亚洲区免费影片| 欧美一区二区在线免费观看| 亚洲三级毛片| 久久精品免费电影| 午夜国产精品视频| 欧美日本不卡高清| 欧美gay视频激情| 国产一级一区二区| 亚洲最新视频在线| 久热re这里精品视频在线6| 欧美午夜电影在线| 亚洲第一中文字幕| 亚洲国产精品成人va在线观看| 99精品视频免费在线观看| 亚洲一区二区三区影院| 亚洲人成亚洲人成在线观看图片| 亚洲深夜福利在线| 一本一本大道香蕉久在线精品| 久久精品国产一区二区三| 亚洲一区3d动漫同人无遮挡| 欧美成人精品| 欧美国产视频在线| 樱桃成人精品视频在线播放| 性欧美videos另类喷潮| 亚洲视频www| 欧美精品一区二| 91久久国产自产拍夜夜嗨| 亚洲国产精品福利| 久久综合狠狠| 麻豆国产精品va在线观看不卡| 国产亚洲网站| 欧美伊久线香蕉线新在线| 欧美亚洲视频在线观看| 国产精品卡一卡二| 亚洲欧美大片| 久久另类ts人妖一区二区 | 国产亚洲一区二区精品| 亚洲香蕉网站| 欧美一级专区免费大片| 国产伦精品一区二区三区在线观看 | 欧美色欧美亚洲另类七区| 日韩午夜激情电影| 亚洲专区免费| 国产精品亚洲产品| 久久av红桃一区二区小说| 老司机午夜精品视频在线观看| 好吊日精品视频| 狂野欧美一区| 日韩视频在线观看国产| 亚洲综合日韩在线| 国产一区二区日韩| 麻豆国产精品777777在线| 亚洲国产高清aⅴ视频| 一本色道久久综合狠狠躁篇的优点 | 国产精品一区一区| 午夜精品久久久久久久久久久| 久久精品夜色噜噜亚洲a∨| 曰韩精品一区二区| 欧美激情亚洲自拍| 亚洲视频专区在线| 美女视频黄 久久| 亚洲天堂av综合网| 国产综合视频| 欧美日韩不卡一区| 久久国产精品色婷婷| 亚洲国内高清视频| 欧美一区二区三区喷汁尤物| 久久久午夜视频| 亚洲破处大片| 国产农村妇女精品一二区| 鲁大师成人一区二区三区| 99视频有精品| 欧美成人亚洲| 欧美专区亚洲专区| 99视频精品| 在线欧美日韩| 国产日韩av在线播放| 欧美精品亚洲精品| 久久午夜羞羞影院免费观看| 亚洲一区三区电影在线观看| 亚洲丶国产丶欧美一区二区三区 | 亚洲欧洲日韩综合二区| 国产精品久久一级| 欧美电影在线观看| 久久国产乱子精品免费女| 一区二区三区欧美激情| 亚洲第一在线综合网站| 久久精品99无色码中文字幕| 夜夜爽99久久国产综合精品女不卡| 国产日韩免费| 国产精品久久久久久久免费软件| 欧美成人中文| 欧美成人一区二区三区片免费| 久久久精品动漫| 欧美与欧洲交xxxx免费观看| 亚洲小少妇裸体bbw|