Loki系列一:优雅的Typelist
2010-07-31 11:33
127 查看
Typelist定义:
template
struct Typelist
{
typedef T Head;
typedef U Tail;
};
约定为Typelist的最后一个元素 : NullType 定义class NullType {};
约定Tail可以为另一个Typelist,这样就可以无限扩充,管理任意多的类型了
MakeTypelist定义:(为18个类型以内的Typelist提供帮助,足够用了)
template
<
typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
typename T4 = NullType, typename T5 = NullType, typename T6 = NullType,
typename T7 = NullType, typename T8 = NullType, typename T9 = NullType,
typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,
typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,
typename T16 = NullType, typename T17 = NullType, typename T18 = NullType
>
struct MakeTypelist
{
private:
typedef typename MakeTypelist
<
T2 , T3 , T4 ,
T5 , T6 , T7 ,
T8 , T9 , T10,
T11, T12, T13,
T14, T15, T16,
T17, T18
>
::Result TailResult;
public:
typedef Typelist Result;
};
template<>
struct MakeTypelist<>
{
typedef NullType Result;
};
如下使用:
typedef MakeTypelist::ResultIntegerTypes;
Typelist可以管理一堆型别,下篇再说下加于其上的一系列优雅的操作
template
struct Typelist
{
typedef T Head;
typedef U Tail;
};
约定为Typelist的最后一个元素 : NullType 定义class NullType {};
约定Tail可以为另一个Typelist,这样就可以无限扩充,管理任意多的类型了
MakeTypelist定义:(为18个类型以内的Typelist提供帮助,足够用了)
template
<
typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
typename T4 = NullType, typename T5 = NullType, typename T6 = NullType,
typename T7 = NullType, typename T8 = NullType, typename T9 = NullType,
typename T10 = NullType, typename T11 = NullType, typename T12 = NullType,
typename T13 = NullType, typename T14 = NullType, typename T15 = NullType,
typename T16 = NullType, typename T17 = NullType, typename T18 = NullType
>
struct MakeTypelist
{
private:
typedef typename MakeTypelist
<
T2 , T3 , T4 ,
T5 , T6 , T7 ,
T8 , T9 , T10,
T11, T12, T13,
T14, T15, T16,
T17, T18
>
::Result TailResult;
public:
typedef Typelist Result;
};
template<>
struct MakeTypelist<>
{
typedef NullType Result;
};
如下使用:
typedef MakeTypelist::ResultIntegerTypes;
Typelist可以管理一堆型别,下篇再说下加于其上的一系列优雅的操作
相关文章推荐
- Android 源码系列之<十九>自定义Gradle Plugin,优雅的解决第三方Jar包中的bug<下>
- 用泛型编程技术实现对结构体成员的按下标访问( loki 库)--泛型编程之工业应用系列(之一)
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调
- [转]新兵训练营系列课程——编写优雅代码
- 爬虫入门系列(二):优雅的HTTP库requests
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调
- Markdown系列(6)- 如何优雅地在Markdown中输入数学公式
- Spring Boot系列(六):如何优雅的使用mybatis
- Spring Boot干货系列:(一)优雅的入门篇
- 【量化小讲堂-Python&Pandas系列22】最优雅的Python编程方式:Jupyter Notebook视频教程
- Spring Boot系列(六):如何优雅的使用mybatis
- 【高效代码调错系列之代码规范】——写优雅的代码
- Spring Boot干货系列:(一)优雅的入门篇
- Android 源码系列之<十七>自定义Gradle Plugin,优雅的解决第三方Jar包中的bug<上>
- IOS控件系列--优雅的表情键盘设计(扩展性好)
- 神舟优雅系列和神舟精盾系列哪个好?
- LAMP系列之Apache优雅重启、优雅关闭
- Spring Boot干货系列:(一)优雅的入门篇
- 爬虫入门系列(二):优雅的HTTP库requests
- Spring Boot系列(六):如何优雅的使用mybatis