讨论一下Loki的typelist!

riding 2004-10-09 04:45:37
我发现Loki库中的typelist的用处不是很大,每次要使用的华 typedef TYPELIST_5< int,usigned long,char,byte, short> FIVETYPELIST;
他提供的list_remove, list_add,都不是封装好的,而且访问都要提供数字,不知道各位大侠有什么办法能根据一个typelist 自动创建typelist内的类型实例。而且其他人不要关心typelist的技术细节,只要重新list_add增加一个新类型,其代码不需修改,就能创建这个新类型和以前类型的实例。
...全文
312 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
riding 2004-10-13
  • 打赏
  • 举报
回复
好!就是一点点缺点,每增加一个新类型,必须更改typedef ClassList< Type1, ClassList< Type2> > classlist;为新的typedef ClassList< Type1, ClassList< Type2,ClassList< Type3> > classlist;
谢谢啦!
riding 2004-10-12
  • 打赏
  • 举报
回复
还没人响应!
redleaves 2004-10-12
  • 打赏
  • 举报
回复
不知道你说的不方便是指什么.我所说的加个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;
}
riding 2004-10-11
  • 打赏
  • 举报
回复
终于有同行廖!
to redleaves:
我想做的是就是类厂,在Java语言中根据名字很容易产生一个新类型的类.( class.forname;class.newinstance). C++是静太类型的语言.很不方便产生新类型的实例.
我想实现的就是一个类厂,比如产生一个product, product是父类, productchild是子类,
我实现这个架够,传个类厂一个字串,类厂根据字串自动创建productchild.现在希望我能维护一个typelist,类厂的使用者不修改,类厂也不修改,而每增加一个productchild类型,向typelist中
增加一个类型,类厂自动根据新的串名创建新的productchild类型,至于你说的给
摸班板加个产生类实例的函数,即loki中的工厂,我觉得还是太复杂,不方便.想更方便,用typelist自动创建.有没有更好的? msn:big_ride@tom.com
redleaves 2004-10-11
  • 打赏
  • 举报
回复
typelist只是一种技术,有什么用全看你自己.我的程序中就有很多这种东西.不过和书上说的那种用法完全不一样.也没人愿意看!这才是郁闷的地方....
还有,C++中类型是没法修改的,所以,所有的add,remove之类的操作都不过是产生一个新类型.要完全不修改其它的代码是不可能的,至少有一处要改一下类型的名字.
至于你说的功能看上去有点像类工厂,这个很好实现,只要给你的模板加个产生类实例的函数就可以了.其实书上的typelist功能并不是很强,你还可以给它加名称/类型访问的机制,还可以做成动态访问的....
Robin 2004-10-10
  • 打赏
  • 举报
回复
我感觉这个东西用处不到;至少我工作中根本没有用到过;以前在学校的时候到是看过;现在都忘了
riding 2004-10-10
  • 打赏
  • 举报
回复
怎么没人?自己顶!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧