loki::typelist

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
	
}
 

你可能感兴趣的:(list)