⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typeline.h

📁 使TypeList的生成线性化
💻 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 + -