设为首页 加入收藏

TOP

c++ 泛型编程 之 自动生成代码
2015-07-20 17:15:55 来源: 作者: 【 】 浏览:2
Tags:编程 自动生成 代码

?

关于 C++ 泛型中的 TypeList ,参考 c++ 泛型编程 之 TypeLists

?

?

#ifndef GENSCATTERHIERARCHY_H_
#define GENSCATTERHIERARCHY_H_
#include typelists.h
#include typetraits.h


#if defined(_MSC_VER) && _MSC_VER >= 1300
// 'class1' : base-class 'class2' is already a base-class of 'class3'
#pragma warning( disable : 4584 )
#endif // _MSC_VER


//运用Typelists 自动产生Classes

//1. 产生“散乱的继承体系”(scattered hierarchies)
template
  
   class Unit>class GenScatterHierarchy;

template
   
    class Unit> class GenScatterHierarchy
    
     ,Unit>//如果第一个型别是TypeList,就递归产生GenScatterHierarchy
     
       :public GenScatterHierarchy
      
       //和GenScatterHierarchy
       
        ,并继承二者。 ,public GenScatterHierarchy
        
          { public: typedef Typelist
         
           TList; typedef GenScatterHierarchy
          
            LeftBase; typedef GenScatterHierarchy
           
             RightBase; }; template
            
             class Unit>//如果第一个型别是个单一型别(ActomicType,相对于Typelist class GenScatterHierarchy : public Unit
             
              // GenScatterHeierarchy便把该型别传递给Unit,然后继承Unit
              
                { public: typedef Unit
               
                 LeftBase; }; template
                
                  class Unit> class GenScatterHierarchy
                 
                  //空类 { }; //2. 产生线性继承体系。 //1. 要求这个Unit有两个引数 //2. 要求Unit继承于Unit的第二个引数Base,这样GenLinearHierarchy才能生成串状继承结构 template< class TList, template
                  
                   class Unit, class Root = EmptyType >class GenLinearHierarchy;//声明 template
                   
                    class Unit,class Root> class GenLinearHierarchy
                    
                     ,Unit,Root> : public Unit
                     
                       > { }; template
                      
                       class Unit,class Root> class GenLinearHierarchy
                       
                        ,Unit,Root> :public Unit
                        
                          { }; //GenScatterHierarchy的访问辅助类 template
                         
                          class Unit> Unit
                          
                           &FieldHelper(GenScatterHierarchy
                           
                            &obj,Int2Type<0>) { GenScatterHierarchy
                            
                             &leftBase = obj; return leftBase; } template
                             
                              class Unit> Unit
                              
                               ::Result>& FieldHelper(GenScatterHierarchy
                               
                                &obj,Int2Type
                                ) { GenScatterHierarchy
                                 
                                  & rightBase = obj; return FieldHelper(rightBase,Int2Type
                                  
                                   ()); } template
                                   
                                    class Unit> Unit
                                    
                                     ::Result>&Field(GenScatterHierarchy
                                     
                                      &obj) { return FieldHelper(obj,Int2Type
                                      ()); } #endif
                                     
                                    
                                   
                                  
                                 
                               
                              
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    
   
  

?

?

template
    
      struct Holder { T mValue; }; void hierarchygenerators_Test() { //GenScatterHierarchy typedef GenScatterHierarchy
     
       MyTestClass; MyTestClass obj; Field<0>(obj).mValue = 'a'; int i = Field<1>(obj).mValue; typedef TYPELIST_2(int,int) f; //GenLinearHierarchy }
     
    


?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Problem ACodeForces 148D 概率dp 下一篇[POJ]3277.City Horizon

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)