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

  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>
            久久er99精品| 亚洲第一页在线| 日韩视频中文字幕| 欧美自拍偷拍午夜视频| 亚洲精品色图| 国产精品卡一卡二卡三| 国产精品尤物| 亚洲欧洲精品一区二区三区不卡| 亚洲影院免费| 一区二区三区**美女毛片| 欧美日韩中文在线观看| 一区二区福利| 久久久久久亚洲精品中文字幕 | 国产精品自拍视频| 亚洲视频福利| 亚洲免费不卡| 欧美日韩国产在线| 亚洲午夜视频在线| 亚洲视屏在线播放| 国产午夜精品久久| 老司机精品久久| 欧美1区2区| 亚洲精品综合| 正在播放欧美一区| 韩日精品视频| 欧美成人免费全部观看天天性色| 免费在线亚洲| 亚洲女优在线| 欧美一进一出视频| 亚洲激情一区| 一区二区高清视频| 国内偷自视频区视频综合| 久久综合一区| 欧美精品电影| 亚洲欧美日韩国产一区| 久久精品av麻豆的观看方式| 亚洲国产精品一区二区尤物区| 欧美激情综合色| 欧美区二区三区| 欧美一区二区在线播放| 在线亚洲一区二区| 韩日午夜在线资源一区二区| 免费观看30秒视频久久| 欧美日韩国产小视频| 久久精品99国产精品日本| 乱人伦精品视频在线观看| 亚洲婷婷在线| 久久视频国产精品免费视频在线| 亚洲精品综合精品自拍| 香蕉国产精品偷在线观看不卡| 亚洲片在线观看| 校园激情久久| 亚洲视频视频在线| 久久久久免费视频| 亚洲一区二区欧美| 久久精品人人做人人爽| 午夜精品久久久久| 欧美—级在线免费片| 久久久久久穴| 国产精品久久久久一区二区三区 | 欧美一级在线亚洲天堂| 亚洲成色www久久网站| 亚洲一区免费观看| 亚洲欧美日韩精品在线| 在线观看国产日韩| 一区二区日韩欧美| 黄色工厂这里只有精品| 一区二区91| 99精品国产福利在线观看免费| 久久国内精品视频| 欧美好吊妞视频| 久久gogo国模裸体人体| 亚洲一区二区在线视频| 欧美激情四色| 亚洲成色精品| 国内精品美女av在线播放| 99pao成人国产永久免费视频| 精品盗摄一区二区三区| 欧美亚洲综合网| 亚洲性视频网站| 欧美日韩系列| 亚洲免费激情| 日韩午夜激情| 欧美屁股在线| 日韩性生活视频| 亚洲免费大片| 欧美精品免费播放| 亚洲国产精品一区二区三区 | 免费日韩视频| 精品不卡在线| 久热精品在线视频| 麻豆av一区二区三区久久| 影音先锋另类| 久久综合国产精品| 欧美~级网站不卡| 在线播放豆国产99亚洲| 久久久久国产免费免费| 美女视频网站黄色亚洲| 国产一区高清视频| 久久久久久久久综合| 女生裸体视频一区二区三区| 亚洲国产婷婷香蕉久久久久久99| 久久久噜噜噜久久中文字免| 欧美 日韩 国产一区二区在线视频 | 欧美福利小视频| 在线激情影院一区| 久久久久久午夜| 亚洲国产另类精品专区 | 欧美日韩免费高清一区色橹橹| 亚洲日本中文字幕免费在线不卡| 亚洲美女电影在线| 欧美日本成人| 中文网丁香综合网| 久久人人超碰| 亚洲卡通欧美制服中文| 欧美日韩在线播放三区四区| 午夜精品久久| 欧美国产免费| 亚洲一区二区三区久久| 国产日韩欧美综合| 蜜桃av一区二区三区| 一本色道久久| 裸体丰满少妇做受久久99精品| 亚洲精品国产精品乱码不99| 噜噜噜躁狠狠躁狠狠精品视频| 免费看亚洲片| 亚洲另类自拍| 性欧美超级视频| 尤物99国产成人精品视频| 欧美精品久久天天躁| 亚洲欧美久久久久一区二区三区| 久久综合久久88| 99精品视频免费全部在线| 国产精品亚洲一区| 久久综合给合| 国产手机视频一区二区| 欧美一区二区在线播放| 日韩一级精品视频在线观看| 激情六月婷婷久久| 国产精品国产自产拍高清av| 免费人成网站在线观看欧美高清| 亚洲影院在线观看| 亚洲裸体视频| 亚洲第一中文字幕| 久久久久高清| 性欧美8khd高清极品| 一本色道久久综合亚洲精品不| 伊人成综合网伊人222| 国产女人18毛片水18精品| 欧美日韩激情小视频| 欧美91视频| 巨胸喷奶水www久久久免费动漫| 欧美亚洲免费| 亚洲私人影院在线观看| 亚洲国产成人午夜在线一区 | 亚洲青涩在线| 模特精品在线| 久久噜噜亚洲综合| 亚洲欧美日韩国产成人| 99re热这里只有精品免费视频| 伊人久久亚洲影院| 国产精品国产三级国产专播精品人| 免费亚洲视频| 久久久久久97三级| 久久国产免费| 欧美中文在线免费| 欧美影院在线| 欧美一区二区日韩一区二区| 午夜在线精品偷拍| 午夜视频在线观看一区| 亚洲免费影视第一页| 亚洲午夜视频| 午夜精品一区二区三区四区| 亚洲女女女同性video| 亚洲一区二区三区免费视频| 久久性天堂网| 亚洲日本电影| 亚洲人成毛片在线播放女女| 亚洲激情在线视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲第一毛片| 在线看片第一页欧美| 国产专区欧美专区| 亚洲成人资源网| 亚洲国产成人91精品| 在线免费观看日本欧美| 尤妮丝一区二区裸体视频| 亚洲精华国产欧美| 亚洲精品视频免费观看| 亚洲精品欧洲| 亚洲一区二区视频| 久久成人在线| 久久久久久久久综合| 欧美大尺度在线观看| 最新成人av网站| 在线一区二区三区做爰视频网站| 亚洲日本理论电影| 欧美大胆人体视频| 欧美国产日韩视频| 欧美日韩精品二区第二页|