读书人

loki库里新的typelist的实现没看懂,该

发布时间: 2012-03-22 17:43:57 作者: rapoo

loki库里新的typelist的实现没看懂

C/C++ code
template        <            typename T1  = NullType, typename T2  = NullType, typename T3  = NullType,            typename T4  = NullType, typename T5  = NullType, typename T6  = NullType,            typename T7  = NullType, typename T8  = NullType, typename T9  = NullType,            typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,            typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,            typename T16 = NullType, typename T17 = NullType, typename T18 = NullType        >         struct MakeTypelist        {        private:            typedef typename MakeTypelist            <                T2 , T3 , T4 ,                 T5 , T6 , T7 ,                 T8 , T9 , T10,                 T11, T12, T13,                T14, T15, T16,                 T17, T18            >            ::Result TailResult;        public:            typedef Typelist<T1, TailResult> Result;        };        template<>        struct MakeTypelist<>        {            typedef NullType Result;        };


这是较新的做法,我就没看懂,那个特化代表什么意思,什么情况下才会发生特化类型为空的<>,照理说后面应该发生17个nullType作为参数的MakeTypelist版本,而这个又是怎样对应到
template<>
struct MakeTypelist<>
这个特化版本的呢


nullType的声明很简单,就是
class nullType{
};

[解决办法]
C/C++ code
#include<iostream>using namespace std;template<int x> struct test{             enum add{ num=x+test<x-1>::num};             };template<>struct test<0>{                 enum add{num=0};                 };                 int main(){   int a= test<10>::num;   cout<<a<<endl;  system("pause");  return 0;} 

读书人网 >C++

热点推荐