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

  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>
            女人香蕉久久**毛片精品| 嫩草国产精品入口| 亚洲欧洲一区二区在线观看| 久久精品国产精品亚洲| 免费久久精品视频| 亚洲午夜久久久久久久久电影院 | 国产精品麻豆成人av电影艾秋| 狠狠综合久久av一区二区老牛| 亚洲第一精品夜夜躁人人爽| 在线视频日本亚洲性| 欧美片在线播放| 亚洲第一区色| 国产精品扒开腿做爽爽爽软件| 亚洲综合二区| 久久大综合网| 国产日韩在线不卡| 亚洲国产欧美一区二区三区久久| 噜噜噜91成人网| 久久亚洲综合色| 亚洲成色999久久网站| 久久精品国产一区二区三| 久久婷婷国产综合尤物精品 | 浪潮色综合久久天堂| 亚洲经典在线| 午夜欧美电影在线观看| 亚洲国产精品激情在线观看| 亚洲网站啪啪| 一区二区三区www| 国产日韩精品入口| 91久久精品国产91久久性色| 亚洲国产精品传媒在线观看| 国产精品美女久久久| 亚洲午夜一区二区| 一区二区高清在线观看| 99国产精品99久久久久久| 国产嫩草一区二区三区在线观看| 一本色道精品久久一区二区三区| 亚洲欧美成人一区二区在线电影| 尤妮丝一区二区裸体视频| 欧美激情片在线观看| 亚洲国产一区在线| 久久婷婷激情| 欧美国产精品专区| 久久视频在线免费观看| 亚洲高清123| 亚洲网站在线| 亚洲福利专区| 欧美日韩三级| 久久综合狠狠综合久久激情| 一区二区三区四区国产精品| 欧美岛国在线观看| 一本久道久久综合婷婷鲸鱼| 亚洲欧洲日产国产网站| 国内成+人亚洲+欧美+综合在线| 欧美激情视频网站| 国产精品久久久久久久9999 | 欧美日韩另类一区| 欧美极品一区| 国产精品日韩欧美大师| 欧美午夜精品久久久久久人妖 | 激情久久久久久| 久久激情视频免费观看| 久久艳片www.17c.com| 欧美与黑人午夜性猛交久久久| 性感少妇一区| 久久永久免费| 亚洲黄色一区| 亚洲香蕉视频| 亚洲人在线视频| 亚洲天堂av在线免费| 久久资源av| 欧美高清自拍一区| 中文国产一区| 欧美性理论片在线观看片免费| 国产精品婷婷午夜在线观看| 在线看片一区| 久久综合伊人77777蜜臀| 亚洲人成77777在线观看网| 午夜精品久久久久久久99樱桃| 亚洲天堂网站在线观看视频| aaa亚洲精品一二三区| 国内一区二区在线视频观看| 亚洲第一区色| 久久伊人免费视频| 欧美中文字幕视频在线观看| 国产午夜精品福利| 欧美一区二区黄色| 亚洲精品一区二区三区福利| 亚洲精品视频免费观看| 午夜在线电影亚洲一区| 国产精品a久久久久久| 亚洲网站在线看| 午夜影院日韩| 亚洲第一网站免费视频| 性欧美在线看片a免费观看| 欧美激情亚洲自拍| 亚洲免费精彩视频| 亚洲欧洲精品一区二区三区 | 激情六月婷婷综合| 亚洲免费视频在线观看| 久久av老司机精品网站导航| 99在线精品视频| 国产精品一区二区视频| 欧美一区二区三区日韩| 亚洲欧美日韩在线| 国产伦精品一区二区三区视频孕妇 | 亚洲欧美日韩国产成人| 91久久精品国产91性色| 久久久夜色精品亚洲| 亚洲精品日韩精品| 亚洲精品国产欧美| 在线成人黄色| 一级成人国产| 亚洲国产精品久久久久| 亚洲人午夜精品| 国产亚洲一区二区精品| 卡一卡二国产精品| 国产精品v欧美精品v日韩| 一区二区冒白浆视频| 欧美一区二区在线播放| 欧美综合国产| 99国内精品久久| 中日韩美女免费视频网站在线观看| 亚洲欧洲精品一区| 久久中文字幕一区| 免费国产一区二区| 久久九九99视频| 国产精品午夜电影| 亚洲欧洲在线一区| 韩国精品久久久999| 亚洲精品欧美激情| 国产裸体写真av一区二区| 亚洲图片欧美一区| 在线视频国内自拍亚洲视频| 久久久噜噜噜久久人人看| 宅男精品导航| 欧美视频一区在线| 欧美高清视频一区二区三区在线观看 | 国产日韩欧美一二三区| 亚洲七七久久综合桃花剧情介绍| 国内精品久久久久久久影视麻豆| 午夜在线成人av| 美女脱光内衣内裤视频久久影院| 一区二区三区视频在线看| 免费久久99精品国产| 亚洲激情中文1区| 香蕉乱码成人久久天堂爱免费 | 亚洲色诱最新| 欧美激情一区二区三区在线视频观看| 香蕉乱码成人久久天堂爱免费| 亚洲视频1区2区| 欧美激情综合五月色丁香| 亚洲最新合集| 亚洲国产精品第一区二区三区| 亚洲精选在线观看| 一区二区三区日韩欧美精品| 最近中文字幕日韩精品| 日韩视频中文| 一区二区高清视频| 91久久精品国产91久久性色| 欧美激情第六页| 蜜臀av在线播放一区二区三区 | 一区二区三区不卡视频在线观看| 亚洲一区在线观看视频 | 欧美日本网站| 亚洲欧美日韩久久精品| 蜜桃久久精品乱码一区二区| 亚洲精品乱码久久久久久黑人| 欧美四级电影网站| 久久久久久夜| 一本色道久久综合精品竹菊| 久久精品人人做人人综合| 亚洲区免费影片| 国产精品萝li| 美日韩精品免费观看视频| 亚洲一区bb| 亚洲丁香婷深爱综合| 午夜精品婷婷| 亚洲美女免费精品视频在线观看| 国产精品午夜视频| 欧美精品国产精品日韩精品| 欧美在线观看一二区| 日韩一二三区视频| 欧美国产日韩二区| 久久亚洲影音av资源网| 亚洲自拍偷拍福利| 亚洲欧洲另类国产综合| 国产乱子伦一区二区三区国色天香| 欧美91精品| 久久中文欧美| 久久成人精品| 午夜在线一区| 亚洲淫性视频| 99re66热这里只有精品3直播 | 老妇喷水一区二区三区| 午夜精品区一区二区三| 亚洲视频在线视频| 日韩视频精品| 日韩视频免费大全中文字幕| 在线观看日韩av|