使用boost中的property_tree实现配置文件

property_tree是专为配置文件而写,支持xml,ini和json格式文件

 

ini比较简单,适合简单的配置,通常可能需要保存数组,这时xml是个不错的选择。

 

使用property_tree也很简单,boost自带的帮助中有个5分钟指南

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_propertytree/tutorial.html

 

这里写一下使用xml来保存多维数组,在有些情况下一维数组并不能满足要求。

举个简单的例子吧:

xml格式如下:

<debug>   <total>3</total>  <persons>    <person>    <age>23</age>    <name>hugo</name>  </person>  <person>    <age>23</age>     <name>mayer</name>  </person>  <person>    <age>30</age>    <name>boy</name>  </person>  </persons></debug>

定义结构体如下:

 1 struct person 2 { 3  int age; 4  std::string name; 5 }; 6  7 struct debug_persons 8 { 9  int itsTotalNumber;10  std::vector<person> itsPersons;11  void load(const std::string& filename);12  void save(const std::string& filename);13 };

复制代码

2个载入和保存的函数:

 1 void debug_persons::save( const std::string& filename ) 2 { 3  using boost::property_tree::ptree; 4  ptree pt; 5  6  pt.put("debug.total", itsTotalNumber); 7  8  BOOST_FOREACH(const person& p,itsPersons) 9  {10   ptree child;11   child.put("age",p.age);12   child.put("name",p.name);13   pt.add_child("debug.persons.person",child);14  }15  // Write property tree to XML file16  write_xml(filename, pt);17 18 }19 20 void debug_persons::load( const std::string& filename )21 {22  using boost::property_tree::ptree;23  ptree pt;24 25  read_xml(filename, pt);26  itsTotalNumber = pt.get<int>("debug.total");27 28  BOOST_FOREACH(ptree::value_type &v, pt.get_child("debug.persons"))29  { 30   //m_modules.insert(v.second.data());31   person p;32   p.age = v.second.get<int>("age");33   p.name = v.second.get<std::string>("name");34   itsPersons.push_back(p);35  }36 }

复制代码

main中的代码

 1 int _tmain(int argc, _TCHAR* argv[]) 2 { 3   4  try 5  { 6     debug_persons dp; 7     dp.load("debug_persons.xml"); 8     std::cout<<dp<<std::endl; 9     person p;10     p.age = 100;11     p.name = "old man";12     dp.itsPersons.push_back(p);13     dp.save("new.xml");14     std::cout << "Success\n";15  }16  catch (std::exception &e)17  {18   std::cout << "Error: " << e.what() << "\n";19  }20  return 0;21 }

复制代码

这里为了调试输出增加了以下代码:

 1 std::ostream& operator<<(std::ostream& o,const debug_persons& dp) 2 { 3    o << "totoal:" << dp.itsTotalNumber << "\n"; 4    o << "persons\n"; 5    BOOST_FOREACH(const person& p,dp.itsPersons) 6    { 7       o << "\tperson: Age:" << p.age << " Nmae:" << p.name << "\n"; 8    } 9  return o;10 }

复制代码

ps:需要包含以下文件

1 #include <boost/property_tree/ptree.hpp>2 #include <boost/property_tree/xml_parser.hpp>3 #include <boost/foreach.hpp>4 #include <vector>5 #include <string>6 #include <exception>7 #include <iostream>
时间: 2024-09-15 05:11:14

使用boost中的property_tree实现配置文件的相关文章

azure-Visual Studio 无法通过Azure门户中下载的发布配置文件进行网站发布

问题描述 Visual Studio 无法通过Azure门户中下载的发布配置文件进行网站发布 我想在VS2013中通过发布配置文件的方式将网站发布到azure上(使用的azure帐户是中国区1元免费订阅). 我从azure门户上将发布配置文件下载下来,然后通过导入发布文件的方式进行发布,但在导入文件时,老是报这样的错:文件xxx不含microsoft azure的有效发布设置.请问一下这个问题怎么解决呢? 解决方案 Hi VS默认是使用的国际版的azure,所以默认在Visual Studio中

web项目中的web.xml配置文件version参数设置

问题描述 web项目中的web.xml配置文件version参数设置 按照李刚的javaEE企业应用实战,图中的版本号为3.1.为什么我输入3.1就会报错.而输入 2.5就可以.这里代表的什么意思,为什么我不能输入3.1 解决方案 http://blog.csdn.net/kebikakaxi/article/details/8676789 解决方案二: Tomcat web.xml配置文件web.xml配置文件详解web.xml配置文件详解

spring-Spring配置中调用外部数据库配置文件

问题描述 Spring配置中调用外部数据库配置文件 (非web)将数据库配置文件放在src下编译后自动在类路径下生成该文件,这种方式会,但是,如果数据库配置文件不放在src下,而是和src同级目录,Spring配置文件中如何调用这个配置文件? 解决方案 src是类路径,在调用的时候可以在web.xml中指定路径参数classpath*:spring-context.xml这样来配置,如果不是放在src,那么就不在类路径下,那么只有指定具体路径来加载.

winform 配置文件-winform 中使用这种外联配置文件 读取不到数据

问题描述 winform 中使用这种外联配置文件 读取不到数据 winform 中使用这种外联配置文件 在读取的时候 ConfigurationManager.AppSettings[key].ToString().Trim() 总是提示错误,打不开ConfigConfig.xml

如何编写系统中的添加自定义XML配置文件?

问题描述 看到很多开源框架,如Spring,Tomcat都是用xml作为配置文件.在这里想问一下,如果我想在系统中加一些自定义的配置文件,应该先写的XSD和XMLNS,还是先写Java对象,然后生成XSD?现在那种XML解析技术比较适合,Jaxb,dom4j还是digester? 解决方案 个人觉得jaxb比较好,而且是JDK自带的.先写xsd,然后用JDK自带的xjc生成java文件.解决方案二:系统中添加自定义的xml配置文件,如果规则定好,大家都遵守规则,不写xsd也行,用什么解析看习惯了

Struts 2中的struts.xml配置文件

是使用Struts2主要的配置文件,在这个文件中可以配置action,拦截器,result和reslut类型,视图以及视图类型等. 它是我们使用Sturts2开发工作的重点要关注的配置文件.struts.xml文件要放到在src源文件夹,源文件夹的东西将被编译 到classes文件夹下面.struts.xml文件的内容如程序清单所示. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configurati

详解Linux系统中的进程初始化配置文件inittab

  /etc/inittab文件描述了哪些进程开始启动并正常运行.inittab为linux初始化文件系统时init初始化程序用到的配置文件.这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机.关机.重启对应的命令;各运行级登陆时所运行的命令. inittab文件中的条目的格式如下: label:runlevels:action:process 下面分别介绍各个字段 1.label label 是一个独特的序列,确定了一个条目1 - 4字符,一些系统只支持2

Win7 32位系统在域中复制漫游用户配置文件的方法

  1.首先右击"计算机",选择"属性"选项,在打开界面中点击左侧的"高级系统设置"选项; 2.在弹出来的系统属性界面中,切换到"高级"选项卡,点击"设置"按钮; 3.然后在弹出来的用户配置文件窗口中,点击默认配置文件,然后点击"复制到"按钮; 4.之后设置文件路径并点击"确定"就可以了哦.

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run         for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));