资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

讨论一下Loki的typelist!

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

我发现Loki库中的typelist的用处不是很大,每次要使用的华   typedef   TYPELIST_5<   int,usigned   long,char,byte,   short>   FIVETYPELIST;  
        他提供的list_remove,   list_add,都不是封装好的,而且访问都要提供数字,不知道各位大侠有什么办法能根据一个typelist   自动创建typelist内的类型实例。而且其他人不要关心typelist的技术细节,只要重新list_add增加一个新类型,其代码不需修改,就能创建这个新类型和以前类型的实例。

网友回答:

发表者:flyinger

我感觉这个东西用处不到;至少我工作中根本没有用到过;以前在学校的时候到是看过;现在都忘了

发表者:redleaves

typelist只是一种技术,有什么用全看你自己.我的程序中就有很多这种东西.不过和书上说的那种用法完全不一样.也没人愿意看!这才是郁闷的地方....  
  还有,C++中类型是没法修改的,所以,所有的add,remove之类的操作都不过是产生一个新类型.要完全不修改其它的代码是不可能的,至少有一处要改一下类型的名字.  
  至于你说的功能看上去有点像类工厂,这个很好实现,只要给你的模板加个产生类实例的函数就可以了.其实书上的typelist功能并不是很强,你还可以给它加名称/类型访问的机制,还可以做成动态访问的....

发表者:redleaves

不知道你说的不方便是指什么.我所说的加个Builder函数就是加在typelist中的.你说的功能实现起来大致如下:  
   
  #include   <stdio.h>  
  #include   <string.h>  
   
  typedef   struct   _NULL_TYPE   NullType;  
   
  template   <   typename   _classname,   typename   _nextnode   =   NullType   >  
  class   ClassList   {  
      public:  
      typedef   _classname   Type;  
      typedef   _nextnode   NextNode;  
      static   void   *CreateObj(   void   )   {  
          return   new   Type;  
      }  
      static   void   *CreateByName(   const   char   *pName   )   {  
          if   (   strcmp(Type::GetName(),   pName)   ==   0   )   {  
              return   CreateObj();  
          }   else   {  
              return   NextNode::CreateByName(   pName   );  
          }  
      }  
  };  
   
  template<   typename   _classname   >  
  class   ClassList<   _classname,   NullType   >   {  
      public:  
      typedef   _classname   Type;  
      static   void   *CreateObj(   void   )   {  
          return   new   Type;  
      }  
      static   void   *CreateByName(   const   char   *pName   )   {  
          if   (   strcmp(Type::GetName(),   pName)   ==   0   )   {  
              return   CreateObj();  
          }   else   {  
              return   NULL;  
          }  
      }  
  };  
   
  class   Type1{  
      public:  
      static   const   char   *GetName(   void   )   {  
          return   "Type1";  
      }  
      Type1()   {  
          printf("Create   Type1!\n");  
      }  
  };  
   
  class   Type2{  
      public:  
      static   const   char   *GetName(   void   )   {  
          return   "Type2";  
      }  
      Type2()   {  
          printf("Create   Type2!\n");  
      }  
  };  
   
  typedef   ClassList<   Type1,   ClassList<   Type2>   >   classlist;  
  int   main(void)   {  
      classlist::CreateByName(   "Type2"   );  
      classlist::CreateByName(   "Type1"   );  
      ....  
      return   0;  
  }


 

 
热门推荐笔记本: 神舟笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved