loki的typelist用来形成class的list
依赖于递归行为 只不过在编译期执行
namespace loki
{
class NullType;
struct EmptyType {};
template<class T, class u>
struct TypeList
{
typedef T Head;
typedef U Tail;
};
typedef TypeList<char, TypeList<signed char, TypeList<unsigned char,NullType> > > CharList;
#define TYPELIST_1(T1) TypeList<T1,NullType>
#define TYPELIST_2(T1,T2) TypeList<T1, TYPELIST_1(T2)>
#define TYPELIST_3(T1,T2,T3) TypeList<T1,TYPELIST_2<T2,T3>>
//计算typelist的长度
template <class TList> struct Length;
template <>
Length<NullType>
{
enum {value = 0};
};
template<class T,class U>
struct Length<TypeList<T,U> >
{
enum { value = 1 + Length<U>::value};
};
//在typelist中查找某一type
template<class Tlist,class T> struct Indexof;
template<class T>
struct Indexof<NullType,T>
{
enum { value = -1};
};
template <class Tail, class T>
struct Indexof<TypeList<T,Tail>, T>
{
enum {value = 0};
};
template <class Head,class Tail,class T>
struct Indexof<TypeList<Head,Tail>,T>
{
private:
enum {temp = Indexof<Tail,T>::value};
public:
enum {value = temp==-1?-1:1+temp};
};
//list其他一些行为
//append
//erase
//replace
}