`
canonical
  • 浏览: 358598 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++配置管理

阅读更多

  自从离开学校就基本上不再使用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;



所幸C++的类型系统能够偷偷的去干很多见不得人的勾当,因此便有了下面这个简易机制。

<!---->#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);
  }
};


_variant_t是VC++在<comdef.h>中提供的对变体数据类型的封装。使用S_P和G_P这样的宏可以由编译器检查变量名的正确性。

分享到:
评论
1 楼 jimmy_c 2008-04-10  
boost里已经有现成的啦!

相关推荐

    C++后台服务管理配置文件

    优秀的代码,标准的代码规范,使我们的服务更加的一流,更加的完美的配置文件

    XML文件配置C++程序

    配置表加载,修改的C++程序,便于资源管理

    C++开发基于Qt与MySQL的图书管理系统源码+sql数据库+配置方法.zip

    C++开发基于Qt与MySQL的图书管理系统源码+sql数据库+配置方法.zip C++开发基于Qt与MySQL的图书管理系统源码+sql数据库+配置方法.zip C++开发基于Qt与MySQL的图书管理系统源码+sql数据库+配置方法.zip 该项目是个人...

    固定资产管理系统+配置视频(C++)

    绝对可以运行 另外里面还有个配置视频 看着做就知道了。由于上传权限限制,功能演示的视频就不放上去了,会配置就好。

    C++ 人事 工资管理系统 Access

    C++ 人事 工资管理系统 Access Access数据库,运行或测试前请先配置好ODBC数据源,密码说明文件里有,在VC6.0下可以编译,不过有少许错误,不影响编译。它可完成员工资料添加、工资自动核算、系统设置等功能。

    自写的一个C/C++程序的参数管理类

    源码: wsdConfigMgr.h wsdConfigMgr.cpp 另附配置文件例子: config.ini &lt;br&gt;感觉C/C++管理配置文件与参数不如Java那样自在,于是自己写了这么一个东西。如有高人,请不吝赐教!

    C++银行账户管理系统毕业设计

    银行账户管理系统,分为客户模式和管理员模式 可实现模拟ATM机的功能,和管理员的账户管理,日志查看等 此为校内优秀毕业设计,含论文、PPT、演示程序 演示程序的用法及环境配置请访问:www.worldofbeside.com

    C++学生信息管理系统

    学生管理系统需要配置ODBC。 4、附加数据库 (1)将实例目录“database”文件夹下扩展名为“.MDF”和“.LDF”的两个文件拷贝到SQL Server 2000安装路径下的“MSSQL”/“Data”目录下。 (2)打开SQL Server 2000中的...

    C++餐饮管理系统

    基于C++ MFC 开发的餐饮管理系统,包含完整项目源码,可用VC6.0或VS打开,打开即可直接运行或修改,无需其他环境配置,源码包含相关注释,适合初学MFC的童鞋学习之用。 数据库用的是ACCESS 2000。

    图书管理系统c++ 数据库

    图书管理系统 c++ 数据库。里面有详细的uml建模实现(需求分析),以及数据库的配置(包括sql语句应写好了直接执行就行了。数据库可以不必是sq server 2000,其他的也行,应经试过了)。注释很详细。

    QT&amp;C++ 学生成绩管理系统 ,无需配置环境,有安装包,适合快速理解.zip

    QT&C++ 学生成绩管理系统 ,无需配置环境,有安装包,适合快速理解.zip 毕业设计 课程设计 系统设计 系统开发 程序开发 C++ QT 源代码毕业设计 课程设计 系统设计 系统开发 程序开发 C++ QT 源代码毕业设计 课程...

    基于C++的商品销售系统(源码+数据库+配置说明).zip

    商品销售管理系统属于小型的进销存管理系统,主要由基础信息管理、入库管理、销售管理、查询管理、往来帐管理和系统管理6个功能模块构成。 基础信息管理模块 在基础信息管理模块中需要实现操作员信息、商品信息、...

    C++开源程序库 C++开源程序库

    同时,Lua便于嵌入C/C++程序,而且编译执行速度非常快,可以说是目前解决C/C++程序配置管理问题的一个出色方案。 9、密码及安全:OpenSSL 安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用...

    C++-QT-图书管理系统

    //除了基本设计要求,我们有意识的引入例如背景音乐,渐变颜色,动画,透明度,为窗口以及按钮增加背景图片,通过配置参数设计字体在按钮中的居中显示,将按钮设计为圆角,设计可以拖动的页面,在tablewidget里面...

    C++ Builder写的工作日志管理软件及源码

    C++ Builder写的工作日志管理软件及源码,使用MSSQL数据库。 还原数据库修改INI配置文件即可运行。

    sw_HART上位机配置调试软件V14.10s_hart_HARTPC机配置管理软件_hart配置软件_lonelyqpj_lo

    HART PC机配置管理软件,Visual C++环境下开发,仅供参考。

    基于C++和C语言的职工管理系统开源项目设计源码

    项目共包含22个文件,其中编译后的目标文件o 6个,C++源代码文件cpp 5个,C++头文件h 5个,Markdown文档文件md 2个,Windows配置文件win 1个,开发者配置文件dev 1个,以及可执行文件exe 1个,布局文件layout 1个。...

    C++、MFC图书馆管理系统之(301用户管理)(源代码)

    5、本程序主要功能为用户管理,乃图书馆管理系统中的一部分,后续会不断上传该系统的其他部分源码,欢迎关注。 6、本程序的开发语言及框架为:C++、MFC。 7、本程序是N年前开发的,受限于本人当时的技术能力,难免会...

    vscode配置c-c++环境及调试器配置.md

    vscode配置c/c 环境 步骤1:安装VSCode 首先,你需要在你的电脑上安装VSCode。你可以从VSCode的官方网站下载并安装。 步骤2:安装C/C++扩展 在VSCode中,打开扩展视图(通过点击左侧边栏上的方块图标或者按下Ctrl...

    C++大作业之学生选课系统

    C++大作业之学生选课系统 ###1、开发环境配置:(Visual Studio 2013) 配置教程:传送门 数据库建表:运行仓库中的course_choice.sql,将自行建表。 ###2、已完成部分: 学生、教师、管理员的登录。 查看课程安排...

Global site tag (gtag.js) - Google Analytics