浏览 3381 次
锁定老帖子 主题:C++配置管理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-12
最后修改:2008-11-23
自从离开学校就基本上不再使用C++了,最近却又因为项目上的原因重新走入这一迷失的世界, 感觉很是缺乏一些顺手的工具。首先就是做配置管理有点麻烦, 因为缺乏反射机制, 无法直接映射, 所以一般需要手工书写配置设置功能. <!----> GConfig cfg;
cfg.set( " bgColor.b " , 3.0 ); cfg.set( " lightEnabled " , false ); t_float b = cfg.get( " bgColor.b " ); bool l = cfg.get( " lightEnabled " );
<!----> t_float b
=
cfg.bgColor.b;
bool l = cfg.lightEnabled;
<!---->#define S_P(x)
do
{
if
(strcmp(name,#x)
==
0
) { x
=
value;
return
; } }
while
(
0
)
#define G_P(x) do { if (strcmp(name,#x) == 0 ) { value = x; return ; } } while ( 0 ) class _GConfig{ public : bool lightEnabled; t_float minX; t_float maxX; t_float minY; t_float maxY; _GConfig(){ // initialize all primitive members memset( this , 0 ,sizeof(_GConfig)); } }; class GConfig: public _GConfig{ public : GColor bgColor; GConfig(){ } _variant_t get( const char * name){ _variant_t value; get(name,value); return value; } void get( const char * name,_variant_t & value){ G_P(lightEnabled); G_P(minX); G_P(maxX); G_P(minY); G_P(maxY); G_P(bgColor.r); G_P(bgColor.g); G_P(bgColor.b); G_P(bgColor.a); } void set( const char * name, _variant_t value){ S_P(lightEnabled); S_P(minX); S_P(maxX); S_P(minY); S_P(maxY); S_P(bgColor.r); S_P(bgColor.g); S_P(bgColor.b); S_P(bgColor.a); } };
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-10
boost里已经有现成的啦!
|
|
返回顶楼 | |