Typelist介绍
来源:互联网 发布:depthmap软件 编辑:程序博客网 时间:2024/06/05 05:59
简单的Typelist
typedef Typelist <int ,NullType> OneTypeOnly;
typedef Typelist <char,Typelist<signed char,Typelist<unsigned char,NullType> > >AllCharTypes;
利用宏包装
typedef TYPELIST_4(signed char,short int,int ,long int)SignedIntegrals;
计算长度
template<class TList> struct Length;
template<>struct Length<NullType>
{
enum{value =0};
};
template<class T ,class U>
struct Length<Typelist<T,U> >
{
enum{value = 1+ Length<U>::value};
};
索引式访问
template<class Head,class Tail>
struct TypeAt<Typelist <Head,Tail>,0>
{
typedef Head Result;
};
template <class Head ,class Tail ,unsigned int i >
struct TypeAt<Typelist<Head,Tail>,i>
{
typedef typename TypeAt<Tail , i-1>::Result Result;
};
查找Typelists
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};
};
添加Typelists
template<class TList,clsss T>struct Append;
template<>struct Append<NullType,NullType>
{
typedef NullType Result;
};
template<class T >struct Append<NullType,T>
{
typedef TypeLIST_l(T) Result;
}
template<class Head,class Tail >
struct Append<NullType,Typelist<Head,Tail> >
{
typedef Typelist<Head,Tail>Result;
};
template<class Head,class Tail ,class T>
{
typedef Typelist<Head,typename Append<Tail ,T>::Result>
Result;
};
删除
template<class TList,class T> struct Erase;
template<class T>
//结束位置
struct Erase<NullType,T>
{
typedef NullType Result;
};
//递归
template<class Tail ,class T>
struct Erase{Typelist<T,Tail>,T}
{
typedef Tail Result;
}
//入口
template<class Head,class Tail ,class T>
struct Erase<Typelist<Head,Tail>,T>
{
typedef Typelist<Head,typename Erase<Tail ,T>::Result>
Result;
};
删除所有指定的型别
template<class TList,class T> struct EraseAll;
template<class T>
//结束位置
struct EraseAll<NullType,T>
{
typedef NullType Result;
};
//递归
template<class Tail ,class T>
struct EraseAll{Typelist<T,Tail>,T}
{
//typedef Tail Result;
typedef typename EraseAll<Tail ,T>:: Result Result
}
//入口
template<class Head,class Tail ,class T>
struct Erase<Typelist<Head,Tail>,T>
{
typedef Typelist<Head,typename Erase<Tail ,T>::Result>
Result;
};
移除所有重复元素
template<class TList> struct NoDuplicates;
template<>struct NoDuplicates<NullType>
{
typedef NullType Result;
}
template<class Head,class Tail>
struct NoDuplicates<Typelist<Head,Tail> >
{
private:
typedef typename NoDuplicates<Tail>::Result L1;
typedef typename Erase<L1,Head>::Result L2;
public:
typedef Typelist<Head,L2>Result;
};
替换元素
template<class TList,class T,class U> struct Replace;
template<class T,class U>
struct Replace<NullType,T,U>
{
typedef NullType Result;
};
template<class T,class Tail ,class U>
struct Replace <Typelist<T,Tail>,T,U>
{
typedef Typelist<U,Tail >Result;
};
template<class Head,class Tail ,class T,class U>
struct Replace <Typelist<Head,Tail>,T,U>
{
typedef Typelist<Head,typename Replace <Tail ,T,U>::Result>
Result;
};
template <class TList ,class T> struct MostDerived
//排序功能,关系公式SUPERSUBCLASS
template< class T >
struct MostDerived <NullType ,T>
{
typedef Result;
};
template <class Head,class Tail,class T>
struct MostDerived <Typelist<Head,Tail>,T>
{
private:
typedef typename MostDerived<Tail ,T >::Result Candidate;
public:
typedef typename Select <SUPERSUBCLASS(Candidate,Head),Head,Candidate>::Result Result;
}
template<class T >struct DerivedToFront;
template<>
struct DerivedToFront<NullType>
{
typedef NullType Result;
};
template <class Head ,class Tail >
struct DerivedToFront<Typelist<Head,Tail> >
{
private:
typedef typename MostDerived <Tail ,Head>::Result TheMostDerived
typedef typename Replace<Tail ,TheMostDerived ,Head>::Result L;
public :
typedef Typelist<TheMostDerived ,L>Result;
}
总结,递归,不同版本模仿处理
- Typelist介绍
- TypeList
- Typelist 笔记
- TypeList IndexOf
- typelist 学习
- Typelist 笔记
- 扩展TypeList:Typelist生成器、MaxSizeOf
- Loki库读解-扩展TypeList:Typelist生成器、MaxSizeOf
- Loki库读解-扩展TypeList:Typelist生成器、MaxSizeOf
- TypeList 之 Append
- TypeList 之 NoDuplicate
- TypeList 之 Erase
- TypeList 之应用 GenScatterHierarchy
- typelist的用途
- TypeList的威力
- C++11 TypeList 妙用
- TypeList 之TypeAt 通过索引查找TypeList的类型
- typelist和functor的比较
- 【sqlserver】merge into test
- MFC 两种创建状态栏方法以及在状态栏实时显示时间
- 右键弹出菜单
- 程序员面试金典: 9.5位操作 5.3给定正整数,找出与其二进制表示中1的个数相同、且大小最接近的两个数
- Unity LBS地图(瓦片地图,不接入任何SDK)
- Typelist介绍
- wax - 3
- React Native Navigator 的路由以及页面跳转
- 移动端如何写一个相对靠谱的倒数秒杀时间或者说开售时间
- JavaScript[01.03]
- GitHub上README.md教程
- OkHttp
- 利用UIWindow创建悬浮按钮
- VS2015 git的使用