[C++模板技术] TypeList(2)
2017-08-22 19:42
183 查看
基于上一篇,这里接着给出针对TypeList的系列操作。就如同求一个TypeList的长度一样,我们依旧需要利用大量的递归技术。
1、随机访问
template <typename TList,unsigned int index> struct TypeAt; template <typename Head,typename Tail> struct TypeAt<TypeList<Head,Tail>,0> { using Result = Head; }; template <typename Head,typename Tail,unsigned int index> struct TypeAt<TypeList<Head, Tail>, index> { using Result = typename TypeAt<Tail, index - 1>::Result; };
2、类别索引查找
template <typename TList,typename T> struct IndexOf; template<typename T> struct IndexOf<NullType, T> { enum { value = -1; }; }; template<typename T, typename Tail> struct IndexOf<TypeList<T, Tail>, T> { enum { value = 0 }; }; template <typename Head,typename Tail,typename T> struct IndexOf<TypeList<Head, Tail>, T> { private: enum { temp = IndexOf<Tail, T>::value }; public: enum { value = temp == -1 ? -1 : temp + 1 }; };
3、附加元素
template<typename TList,typename T> struct Append; template<> struct Append<NullType, NullType> { using Result = NullType; }; template<typename T> struct Append<NullType, T> { using Result = TypeList<T, NullType>; }; template<typename Head,typename Tail> struct Append<NullType, TypeList<Head, Tail>> { using Result = TypeList<Head, Tail>; }; template<typename Head,typename Tail,typename T> struct Append<TypeList<Head, Tail>, T> { using Result = TypeList<Head, typename Append<Tail, T>::Result>; };
4、删除特定类型
template<typename TList,typename T> struct Erase; template<typename T> struct Erase<NullType, T> { using Result = NullType; }; template<typename Tail,typename T> struct Erase<TypeList<T, Tail>, T> { using Result = Tail; }; template<typename Head,typename Tail,typename T> struct Erase<TypeList<Head, Tail>, T> { using Result = TypeList<Head, typename Erase<Tail, T>::Result>; };
相关文章推荐
- [C++模板技术] 类型映射为类型
- 采用C++模板技术,实现的分布式哈希存储服务器
- 我的C++实践(8):表达式模板技术
- 利用C++模板技术支持多种计算策略
- 利用C++模板技术支持多种计算策略
- 使用C++模板技术实现类的动态注册和获取
- c++中的模板技术一:Function Template
- 【C++标准模板库笔记1】C++的模板技术
- Lua 与C/C++ 交互系列:利用模板技术在Lua Code中注册C++类
- C++模板技术
- STL运用的C++技术(1)——成员模板 .
- STL运用的C++技术(1)——成员模板
- 快速排序,c++ 模板技术表述,完全兼容标准库!!!
- [C++模板技术] 整数映射为类型
- [C++模板技术] 散乱继承体系自动生成
- C++ 模板技术
- STL运用的C++技术(3)——模板实参推断 .
- 我的C++实践(8):表达式模板技术
- C++模板技术在共享内存中的应用
- c++模板技术