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

  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)  編輯 收藏 引用
評論

統計

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区欧美二区| 欧美激情一区二区三区全黄| 欧美色精品在线视频| 亚洲精品小视频在线观看| 欧美大片网址| 欧美了一区在线观看| 9色精品在线| 亚洲图片欧美午夜| 国产亚洲一级高清| 欧美精品在线免费观看| 欧美成人精品在线播放| 免费的成人av| 亚洲免费观看| 亚洲一区二区伦理| 国产一区二区三区黄视频| 免费观看亚洲视频大全| 欧美久久久久久久久| 午夜精品久久久久影视| 久久国产手机看片| 亚洲精品系列| 欧美在线地址| 亚洲美女免费精品视频在线观看| 一区二区三区日韩精品视频| 国产精品永久免费观看| 欧美成人激情视频| 欧美日韩直播| 欧美成人性网| 国产麻豆精品在线观看| 欧美黑人一区二区三区| 国产精品乱码久久久久久| 久久人人爽国产| 欧美日一区二区三区在线观看国产免| 欧美一区二区三区在线视频| 免费久久99精品国产自| 性视频1819p久久| 欧美大片免费| 久热综合在线亚洲精品| 欧美午夜精品久久久久久超碰| 久久久亚洲国产美女国产盗摄| 欧美裸体一区二区三区| 老妇喷水一区二区三区| 国产精品视频一区二区三区| 亚洲国产导航| 国产午夜精品理论片a级大结局 | 国产午夜精品理论片a级探花| 亚洲高清毛片| 一区二区三区在线免费视频 | 先锋影音网一区二区| 欧美成人有码| 欧美福利在线| 影院欧美亚洲| 久久精品国产亚洲a| 欧美一区二区三区四区夜夜大片| 欧美精品福利| 亚洲激情成人网| 亚洲欧洲另类国产综合| 久久精品亚洲精品| 久久看片网站| 国内精品99| 久久久www免费人成黑人精品 | 久久久一区二区三区| 国产精品久久久久久亚洲调教| 亚洲人精品午夜在线观看| 亚洲精品极品| 欧美韩日精品| 亚洲精选在线观看| 亚洲视频中文| 国产精品av久久久久久麻豆网| 亚洲日本成人女熟在线观看| 亚洲裸体在线观看| 亚洲精品资源| 亚洲色诱最新| 欧美性猛交99久久久久99按摩| 日韩视频免费大全中文字幕| 日韩视频不卡中文| 欧美色欧美亚洲高清在线视频| 亚洲欧洲中文日韩久久av乱码| 99国产精品久久久| 国产精品xvideos88| 亚洲性视频网站| 久久久五月婷婷| 亚洲国产三级网| 欧美日韩国内自拍| 亚洲欧美另类中文字幕| 久久久精品久久久久| 伊人久久综合| 欧美精品一区在线观看| 99日韩精品| 久久成人国产| 亚洲精品美女在线| 欧美性猛交视频| 久久精品一本| 亚洲精品少妇30p| 欧美制服丝袜第一页| 亚洲激情第一页| 国产精品久久久久aaaa| 久久国产精品黑丝| 亚洲日本成人| 久久精品人人爽| 日韩一级二级三级| 国产日韩一区二区三区| 久久久综合网站| 亚洲精品一区二区网址| 久久久久高清| 亚洲一区二区在线播放| 伊人色综合久久天天| 欧美亚一区二区| 免费亚洲电影在线观看| 亚洲欧美久久久久一区二区三区| 美女999久久久精品视频| 亚洲一区二区三区在线看| 好吊一区二区三区| 欧美日产一区二区三区在线观看| 午夜视频一区二区| 日韩视频一区二区三区在线播放| 欧美一区二区久久久| 99精品视频免费在线观看| 国产一区二区主播在线 | 欧美一二三视频| 一本一本久久a久久精品综合麻豆| 狂野欧美激情性xxxx欧美| 午夜天堂精品久久久久| 99精品视频免费观看视频| 亚洲高清一区二区三区| 国产亚洲精品高潮| 国产精品久久久久久久第一福利| 免费久久99精品国产自| 久久另类ts人妖一区二区| 香港久久久电影| 亚洲一区二三| 一区二区三区国产在线观看| 欧美xxxx在线观看| 美女在线一区二区| 久久久久国产精品人| 久久成人精品电影| 亚洲一区二区三区高清不卡| 9色精品在线| 中文欧美在线视频| 亚洲午夜视频在线观看| 一区二区三区产品免费精品久久75 | 亚洲视频1区2区| 一本大道久久a久久综合婷婷 | 欧美怡红院视频| 欧美亚洲视频一区二区| 亚洲永久在线| 亚洲一区二区三区在线观看视频| 一区二区三区国产在线观看| 亚洲精品字幕| 一本大道av伊人久久综合| 亚洲精选久久| 亚洲一级在线| 性欧美video另类hd性玩具| 午夜一区二区三视频在线观看 | 亚洲精品在线二区| 一二三区精品| 亚洲欧美在线另类| 久久精品国产69国产精品亚洲 | 99国产精品久久久久久久成人热| 亚洲精品日本| 亚洲特级片在线| 欧美亚洲一区三区| 久久亚洲不卡| 亚洲三级电影在线观看| 一区二区动漫| 久久动漫亚洲| 欧美理论视频| 国产乱码精品一区二区三区五月婷| 国产日产亚洲精品| 亚洲国产天堂网精品网站| 99一区二区| 久久国产精品网站| 亚洲国产天堂久久综合网| 一区二区三区毛片| 久久久久久噜噜噜久久久精品| 欧美gay视频| 国产精品自拍小视频| 亚洲高清在线播放| 午夜亚洲视频| 亚洲高清久久久| 欧美亚洲一级| 欧美日本在线视频| 国模一区二区三区| 99视频有精品| 美女网站久久| 亚洲综合日韩在线| 欧美成人在线免费观看| 国产日韩欧美精品综合| 亚洲最新在线| 欧美成人国产| 亚洲欧美一区二区原创| 欧美成人在线影院| 国产麻豆精品视频| 一二美女精品欧洲| 免费成人av在线看| 亚洲视频你懂的| 欧美日韩二区三区| 亚洲国产一区二区三区在线播 | 欧美中文字幕第一页| 亚洲美洲欧洲综合国产一区| 久久亚洲一区二区|