`
canonical
  • 浏览: 368244 次
  • 性别: 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++后台服务管理配置文件

    "C++后台服务管理配置文件"正是这种理念的体现,它涉及了C++编程语言在构建后台服务时的配置管理和最佳实践。 首先,我们来讨论C++语言。C++是一种强大的、面向对象的编程语言,被广泛用于开发系统软件、游戏引擎、...

    C++读写ini配置文件

    在C++编程中,处理配置文件通常是为了存储和读取应用程序的设置或用户偏好。ini文件是一种常见的配置文件格式,其结构简单,易于理解和操作。...只需根据具体需求进行适当的修改,就可以满足不同项目的配置管理需求。

    C++配置文件读取

    Visual C++ 2010 是一个流行的开发环境,支持C++语言,提供了丰富的工具来帮助开发者管理项目和代码。本篇文章将深入探讨在Visual C++ 2010环境下,如何使用纯C++代码实现配置文件的读取与写入。 1. 文件I/O基础 在...

    vscode完整项目以及c++配置文件

    以下是关于VSCode与C++配置的相关知识点: 1. **VSCode安装与启动**: - 首先,你需要从微软官方网站下载适用于你操作系统的VSCode安装包,并按照提示完成安装。 - 安装完成后,启动VSCode,首次打开会引导你进行...

    c++仓库管理系统源码

    C++仓库管理系统源码是一个基于C++编程语言实现的软件应用,主要用于管理和跟踪仓库中的物品库存、出入库操作以及相关的管理活动。这个系统的核心目标是提高仓库运营效率,确保库存数据的准确性和实时性,同时简化...

    VScode c++配置文件

    `tasks.json`文件则管理构建任务,比如编译和链接C++项目。在这个配置下,任务可能被设置为调用MinGW的g++编译器,传递合适的编译选项,如-Wall(显示所有警告)和-Werror(将警告视为错误)。它还可以包含构建目标...

    dev-c++配置文件

    标题中的"dev-c++配置文件"指的是Dev-C++的配置设置,这是一款开源的C/C++集成开发环境,尤其适合初学者使用。Dev-C++包含了GCC编译器,提供了友好的用户界面,允许用户编写、编译、调试C和C++程序。 在描述中提到...

    c++餐饮管理系统

    6. **员工管理**:餐厅经理可以管理员工信息,包括排班、权限分配等,以优化人力资源配置。 7. **收入查询**:系统提供对餐厅收入的查询功能,便于管理层了解每日、每周或每月的营业情况。 8. **数据库管理**:...

    c++读取配置文件

    在C++编程中,读取配置...通过上述方法,你可以有效地在C++程序中读取和解析TXT格式的配置文件,灵活地管理应用程序的行为。在实际项目中,可能还会使用第三方库,如Boost或TinyXML,以支持更复杂的配置格式和功能。

    c++ 编写的设备管理器

    在IT领域,设备管理器是操作系统中的一个核心组件,它负责监控、配置和解决与硬件设备相关的问题。本文将深入探讨使用C++编程语言构建一个类似系统设备管理器的实现,以及这一过程中涉及的关键知识点。 首先,C++是...

    C++工资管理系统源代码

    《C++工资管理系统源代码详解》 在信息技术领域,开发一个有效的工资管理系统是企业运营中的重要环节。本文将深入解析一款基于Visual C++的工资管理系统源代码,旨在为程序员提供学习与参考的宝贵资料。 首先,...

    C++通用的文件配置类

    在C++编程中,文件配置类通常用于管理应用程序的设置和参数,使程序可以根据不同的配置文件进行动态调整。本文将详细介绍一个通用的C++文件配置类的设计与实现,以及如何利用此类来处理配置文件。 首先,这个通用的...

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

    《固定资产管理系统+配置视频(C++)》是一个基于C++编程语言开发的管理软件,用于高效、精确地管理和追踪组织的固定资产。此系统不仅包含了完整的源代码,还附带了一个配置视频,帮助用户理解如何正确地设置和运行...

    visual c++ 文档管理系统

    管理员可以根据企业的实际需求调整系统的配置参数,例如设定用户角色与权限、更改界面主题以及设置默认视图等。这种灵活性确保了《Visual C++ 文档管理系统》可以轻松适应不同企业的业务流程和管理规范,增强了系统...

    C++操作配置文件

    总的来说,C++操作配置文件是一项基础但关键的任务,封装好的类库可以帮助我们更有效地管理应用程序的配置,提高开发效率,并确保配置数据的正确性和一致性。这个资源提供的C++类可能是一个实用的工具,对于需要处理...

    C++设备管理代码

    在这个“C++设备管理代码”压缩包中,我们可以期待找到用C++编写的设备驱动程序和其他与设备交互的代码。设备管理的主要目标是确保系统能正确识别、配置、控制和优化硬件资源。 设备管理的几个关键概念包括: 1. *...

    C++高校人事管理系统 源码

    《C++高校人事管理系统源码解析》 C++是一种强大且高效的编程语言,常用于开发复杂的软件系统,尤其是在教育、科研以及企业管理等领域。本篇将深入解析一款基于C++编写的高校人事管理系统,探讨其核心设计理念和...

    这是一个适用于携程Apollo统一配置中心的Apollo客户端,基于C++实现-Apollo-Client.zip

    1. **配置中心**:Apollo作为配置中心,存储了所有应用的配置信息,支持多环境、多集群的配置管理,使得配置的更新和分发变得简单。 2. **实时推送**:当配置发生变更时,Apollo服务端会将更新推送到各个客户端,...

    基于c++的简易教室管理系统

    C++的`fstream`库提供了读写文件的功能,可以用来保存教室和课程的配置,或者用户的预订记录。 7. **面向对象设计原则**:遵循SOLID原则(单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)...

Global site tag (gtag.js) - Google Analytics