use recursive definition, it's more standard conform
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@768 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
07d6c5d61f
commit
f643f9a5d8
1 changed files with 13 additions and 458 deletions
|
@ -27,466 +27,21 @@ namespace Loki
|
|||
class T11=NullType,class T12=NullType,class T13=NullType,class T14=NullType,class T15=NullType,
|
||||
class T16=NullType,class T17=NullType,class T18=NullType,class T19=NullType,class T20=NullType
|
||||
>
|
||||
struct Seq;
|
||||
|
||||
template<class T01>
|
||||
struct Seq<T01>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
NullType
|
||||
>
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02>
|
||||
struct Seq<T01,T02>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
NullType
|
||||
> >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03>
|
||||
struct Seq<T01,T02,T03>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
NullType
|
||||
> > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04>
|
||||
struct Seq<T01,T02,T03,T04>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
NullType
|
||||
> > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05>
|
||||
struct Seq<T01,T02,T03,T04,T05>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
NullType
|
||||
> > > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
NullType
|
||||
> > > > >
|
||||
>
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
NullType
|
||||
> > > > >
|
||||
> >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
NullType
|
||||
> > > > >
|
||||
> > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
>
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14,T15>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15,
|
||||
class T16>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14,T15,
|
||||
T16>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
Typelist<T16,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
>
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15,
|
||||
class T16,class T17>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14,T15,
|
||||
T16,T17>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
Typelist<T16,
|
||||
Typelist<T17,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
> >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15,
|
||||
class T16,class T17,class T18>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14,T15,
|
||||
T16,T17,T18>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
Typelist<T16,
|
||||
Typelist<T17,
|
||||
Typelist<T18,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15,
|
||||
class T16,class T17,class T18,class T19>
|
||||
struct Seq< T01,T02,T03,T04,T05,
|
||||
T06,T07,T08,T09,T10,
|
||||
T11,T12,T13,T14,T15,
|
||||
T16,T17,T18,T19>
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
Typelist<T16,
|
||||
Typelist<T17,
|
||||
Typelist<T18,
|
||||
Typelist<T19,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > >
|
||||
Type;
|
||||
};
|
||||
template<class T01,class T02,class T03,class T04,class T05,
|
||||
class T06,class T07,class T08,class T09,class T10,
|
||||
class T11,class T12,class T13,class T14,class T15,
|
||||
class T16,class T17,class T18,class T19,class T20>
|
||||
struct Seq
|
||||
{
|
||||
typedef
|
||||
Typelist<T01,
|
||||
Typelist<T02,
|
||||
Typelist<T03,
|
||||
Typelist<T04,
|
||||
Typelist<T05,
|
||||
Typelist<T06,
|
||||
Typelist<T07,
|
||||
Typelist<T08,
|
||||
Typelist<T09,
|
||||
Typelist<T10,
|
||||
Typelist<T11,
|
||||
Typelist<T12,
|
||||
Typelist<T13,
|
||||
Typelist<T14,
|
||||
Typelist<T15,
|
||||
Typelist<T16,
|
||||
Typelist<T17,
|
||||
Typelist<T18,
|
||||
Typelist<T19,
|
||||
Typelist<T20,
|
||||
NullType
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
> > > > >
|
||||
Type;
|
||||
};
|
||||
private:
|
||||
typedef typename Seq< T02, T03, T04, T05, T06, T07, T08, T09, T10,
|
||||
T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>::Type
|
||||
TailResult;
|
||||
public:
|
||||
typedef Typelist<T01, TailResult> Type;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct Seq<>
|
||||
{
|
||||
typedef NullType Type;
|
||||
};
|
||||
|
||||
} // namespace Loki
|
||||
|
||||
|
|
Loading…
Reference in a new issue