使用boost中的property_tree实现配置文件
2011-12-21 13:16
525 查看
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格式如下:
定义结构体如下:
2个载入和保存的函数:
main中的代码
这里为了调试输出增加了以下代码:
ps:需要包含以下文件
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>
定义结构体如下:
struct person { int age; std::string name; }; struct debug_persons { int itsTotalNumber; std::vector<person> itsPersons; void load(const std::string& filename); void save(const std::string& filename); };
2个载入和保存的函数:
void debug_persons::save( const std::string& filename ) { using boost::property_tree::ptree; ptree pt; pt.put("debug.total", itsTotalNumber); BOOST_FOREACH(const person& p,itsPersons) { ptree child; child.put("age",p.age); child.put("name",p.name); pt.add_child("debug.persons.person",child); } // Write property tree to XML file write_xml(filename, pt); } void debug_persons::load( const std::string& filename ) { using boost::property_tree::ptree; ptree pt; read_xml(filename, pt); itsTotalNumber = pt.get<int>("debug.total"); BOOST_FOREACH(ptree::value_type &v, pt.get_child("debug.persons")) { //m_modules.insert(v.second.data()); person p; p.age = v.second.get<int>("age"); p.name = v.second.get<std::string>("name"); itsPersons.push_back(p); } }
main中的代码
int _tmain(int argc, _TCHAR* argv[]) { try { debug_persons dp; dp.load("debug_persons.xml"); std::cout<<dp<<std::endl; person p; p.age = 100; p.name = "old man"; dp.itsPersons.push_back(p); dp.save("new.xml"); std::cout << "Success\n"; } catch (std::exception &e) { std::cout << "Error: " << e.what() << "\n"; } return 0; }
这里为了调试输出增加了以下代码:
std::ostream& operator<<(std::ostream& o,const debug_persons& dp) { o << "totoal:" << dp.itsTotalNumber << "\n"; o << "persons\n"; BOOST_FOREACH(const person& p,dp.itsPersons) { o << "\tperson: Age:" << p.age << " Nmae:" << p.name << "\n"; } return o; }
ps:需要包含以下文件
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include <boost/foreach.hpp> #include <vector> #include <string> #include <exception> #include <iostream>
相关文章推荐
- 使用boost中的property_tree实现配置文件
- 用boost中的property_tree实现配置文件
- 使用 boost::property_tree::ptree 读取配置文件
- BOOST1.41带来的新玩意property tree--很好的配置文件处理类库
- boost 之property_tree操作xml文件
- boost使用property_tree操作xml
- 使用mybatis-generator自动生成实体类,接口实现类和Mapper映射配置文件
- Spring Boot系列教程五:使用properties配置文件实现多环境配置
- Spring学习笔记(16)----使用Spring配置文件实现事务管理
- boost::property_tree读取解析ini文件--推荐
- 使用Boost.PropertyTree处理XML、JSON和INI数据 - 做一个优雅的程序员 - 博客频道 - CSDN.NET
- CentOS 6.3_ RSync实现文件定时备份同步配置与使用 推荐
- boost.property_tree使用示例
- 【转】spring管理属性配置文件properties——使用PropertiesFactoryBean|spring管理属性配置文件properties——使用PropertyPlaceholderConfigurer
- Spring进阶之路(11)-使用Aspectj切面配置和XML配置文件方式实现切面编程
- 使用Go语言实现配置文件热加载功能
- Spring配置文件<context:property-placeholder>标签使用漫谈
- c++用boost的property_tree库来操作xml配置文件
- 第三节:SpringBoot使用properties配置文件实现多环境配置
- 利用maven的resources、filter和profile实现不同环境使用不同配置文件