📄 typeline.h
字号:
//##############################################################################
// typeline.h
// The dnc Module
// Copyright (c) Dreamsoft Mark Zhao
// Create Date:2007-3-19 14:57:54
//##############################################################################
#ifndef __DNC_TYPELINE_H__
#define __DNC_TYPELINE_H__
#ifndef __DNC_TYPELIST_H__
#include "typelist.h"
#endif
#ifndef __DNC_PREPROCESSOR_H__
#include "preprocessor.h"
#endif
#ifdef __BORLANDC__
// Max template parameters count of BC5.5 is 35
# define dnc_typeline_max_length 35
#else
# define dnc_typeline_max_length 128
#endif
// dnc_typeline_args
#define dnc_typeline_enum_args_m(n, param)dnc_pp_comma_if(n)class param##n = NullType
#define dnc_typeline_enum_args(count, param) dnc_typeline_enum_args_i(count,param)
#define dnc_typeline_enum_args_i(count, param) dnc_pp_repeat(count,dnc_typeline_enum_args_m, param)
#define dnc_typeline_args dnc_typeline_enum_args(dnc_typeline_max_length,T)
// dnc_typeline_typelist
#define dnc_typeline_typelist_m(n,data) >
#define dnc_typeline_typelist dnc_pp_enum_params(dnc_typeline_max_length,TypeList<T) , NullType dnc_pp_repeat(dnc_typeline_max_length,dnc_typeline_typelist_m, > )
namespace dnc{
template <class TList> struct TypeLineRemoveNullType;
template <>
struct TypeLineRemoveNullType<NullType>
{
typedef NullType Result;
};
template <class T>
struct TypeLineRemoveNullType<TypeList<NullType,T> >
{
typedef NullType Result;
};
template <class Head, class Tail>
struct TypeLineRemoveNullType<TypeList<Head, Tail> >
{
typedef TypeList<Head,typename TypeLineRemoveNullType<Tail>::Result>
Result;
};
/** 使用线性化的方法生成TypeList对象
* 例如:
* typedef dnc::TypeLine<int,int>::types types
* types的类型为:TypeList<int,TypeList<int,NullType> >
*/
template<dnc_typeline_args>
struct TypeLine{
typedef typename TypeLineRemoveNullType<dnc_typeline_typelist >::Result types;
};
}
#endif //__DNC_TYPELINE_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -