boost 轻量化xml封装

最近项目实在是太忙了~

恩 此封装在一般使用频率不大的键值对应配置, 要复杂的结构还是要编写XML对应生成代码工具比较方便和高效

  1 #pragma once
2 #include <enable_hashmap.h>
3 #include <string>
4 #include <boost/property_tree/ptree.hpp>
5 #include <boost/property_tree/xml_parser.hpp>
6 #include <boost/lexical_cast.hpp>
7
8 class enable_xml_config
9 {
10 public:
11 enable_xml_config():b_init(false)
12 {
13 }
14 bool init(const std::string& filename)
15 {
16 boost::property_tree::ptree root;
17 try
18 {
19 boost::property_tree::xml_parser::read_xml(filename, pt, boost::property_tree::xml_parser::trim_whitespace);
20 root = pt.get_child("root");
21 filepath = filename;
22 }
23 catch (...)
24 {
25 return false;
26 }
27 value_map.clear();
28 for (auto itr = root.begin(); itr!=root.end(); ++itr)
29 {
30 value_map.insert(std::make_pair(itr->first, itr->second.data()));
31 }
32 b_init = true;
33 return b_init;
34 }
35
36 bool check(const std::string& skey) {
37 auto it = value_map.find(skey);
38 if(it == value_map.end())
39 return false;
40 return true;
41 }
42
43 template<class T>
44 T get(const std::string& skey) {
45 try
46 {
47 if(check(skey))
48 return boost::lexical_cast<T>(value_map[skey]);
49 }
50 catch (...)
51 {
52 }
53 return T();
54 }
55
56 template<class T>
57 T get_ex(const std::string& skey, T& def_val = T()) {
58 try
59 {
60 if(check(skey))
61 return boost::lexical_cast<T>(value_map[skey]);
62 }
63 catch (...)
64 {
65 }
66 return def_val;
67 }
68
69 bool save()
70 {
71 if(!b_init)
72 return false;
73
74 try
75 {
76 boost::property_tree::ptree& root = pt.get_child("root");
77 for (auto itr = root.begin(); itr!=root.end(); ++itr)
78 {
79 auto it = value_map.find(itr->first);
80 if (it != value_map.end())
81 {
82 itr->second.data() = it->second;
83 }
84 }
85 boost::property_tree::xml_writer_settings<char> settings(‘\t‘, 1);
86 boost::property_tree::xml_parser::write_xml(filepath, pt,std::locale(), settings);
87 }
88 catch (...)
89 {
90 return false;
91 }
92
93 return true;
94 }
95 private:
96 ENABLE_MAP<std::string, std::string> value_map;
97 boost::property_tree::ptree pt;
98 std::string filepath;
99 bool b_init;
100 };

enable_xml_config.h

附带:

1 #pragma once
2 #ifdef _DEBUG
3 #include <map>
4 #define ENABLE_MAP std::map
5 #else
6 //效率比map高很多 但是无法查看数据 并且无序
7 #include <boost/unordered_map.hpp>
8 #define ENABLE_MAP boost::unordered_map
9 #endif

enable_hashmap.h

时间: 2024-09-29 02:04:01

boost 轻量化xml封装的相关文章

js便签笔记(14)——用nodejs搭建最简单、轻量化的http server

1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后台语言. 但是你制作出来的网页总要运行.总要测试吧?——那就免不了用到http server.我先前都是用visual studio的,虽然很好用,功能很强大,但是我就开发一个html.javascript.css,干嘛用这种傻大本粗的东西.打开一次特别慢,占内存特别厉害,安装时C盘占去好几个G的空间. 后来闲来无事就换成了nodejs.不用安装任何插件,只需要手动创建三个小文件(总共才2KB),运行即可,速

轻量化ViewController的几个小技巧

轻量化ViewController MVC最令人头疼的问题可能就是随着项目愈发复杂,ViewController的代码也会变得越来越冗长.阅读了objc的<Lighter View Controllers>和<Clean Table >这两篇文章之后,总结了一些常用的轻量化ViewController的小技巧. 分离业务重点 既然要简化ViewController中的代码,那么在不改变原来实现方式的前提下,唯一的方法就是把一些可以不用放在ViewController中的代码转移出去

轻量化ViewControllers,读文章做的总结

推荐一个网站 http://objccn.io/ 我这两天才开始看 获益匪浅 看了第一篇文章 <更轻量的View Controllers>感觉写的不错 感觉作者 原文地址 http://objccn.io/issue-1-1/ 示例项目的代码有点旧 Xcode6运行出错 懒的理了 所以我大概模仿他写了一点测试代码 运行环境Xcode7/iOS9 轻量化ViewControllers 顾名思义 就是把ViewController的代码进行简化 让控制器更简单 更清晰 一.把DataSource和

iOS Method Swizzling和分类的妙用AppDelegate轻量化处理

http://www.cocoachina.com/ios/20151117/14167.html 简介 在iOS工程中,AppDelegate往往会有上千行,甚至几千行,这样就会给维护AppDelegate带来诸多麻烦.比方说,老板想在出现HomeViewController之前弹出广告并停顿几秒,这样你就要加入插入广告的逻辑:又比方说,老板想在开始做个请求,判断某个开关是否打开.这样就会在AppDelegate中插入很多相关的不相关的代码. 在AppDelegate中,- (BOOL)app

用nodejs搭建最简单、轻量化的http server(转)

出处:http://www.cnblogs.com/wangfupeng1988/p/4143996.html 1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后台语言. 但是你制作出来的网页总要运行.总要测试吧?——那就免不了用到http server.我先前都是用visual studio的,虽然很好用,功能很强大,但是我就开发一个html.javascript.css,干嘛用这种傻大本粗的东西.打开一次特别慢,占内存特别厉害,安装时C盘占去好几个G的空

json和xml封装数据、数据缓存到文件中

一.APP的通信格式之xml xml:扩展标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己标记语言进行定义的源语言.XML格式统一,扩平台语言,非常适合数据传输和通信,业界公认的标准. 支持操作系统:windows.linux 支持语言:python.php.java 二.APP的通信格式之json JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成. JSON简单的说是javascript中的对象和数组,所以这两种结构就是对象和数组两

基于 Jenkins 实现的轻量化自动化测试运行框架

这几天正好把两年多前搭建的用于自动跑自动化测试应例 的  Jenkins 系统升级到最新版本.当年搭建这个框架也是颇费一番周折,(可惜仅忙于搭建,没有记录下来)现在正好是个时机整理下. 在整个测试团队中,自动化测试虽然带来了回归测试的便利.但是往往会花费比较多的人力来运行.管理.跟踪整个自动化测试.尤其是运行和管理,如果没有一个好的平台(框架),本身维护的 effort就不是一个团队能轻易接受的. 在比较大且长期的项目中,往往会开发一个完整的平台来整合这些自动化测试相关的日常工作.笔者曾经在一个

用nodejs搭建最简单、轻量化的http server

1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后台语言. 但是你制作出来的网页总要运行.总要测试吧?--那就免不了用到http server.我先前都是用visual studio的,虽然很好用,功能很强大,但是我就开发一个html.javascript.css,干嘛用这种傻大本粗的东西.打开一次特别慢,占内存特别厉害,安装时C盘占去好几个G的空间. 后来闲来无事就换成了nodejs.不用安装任何插件,只需要手动创建三个小文件(总共才2KB),运行即可,速

Atom打造轻量化C/C++ IDE

写在前面 近期沉迷Atom的颜值无法自拔,在github的光环下,Atom凭借自身良好的素质,获得了大量开发者的青睐.随之而来的就是丰富的插件库,在插件帮助下,它对各种编程语言都有相当好的支持.对与一个(伪)ACM选手来说,Atom没有自带的C/C++编译功能可以说是相当大的遗憾了.但是最后我还是选择向颜值低头,没有自带编译环境,那就创造编译环境. 如果安装过程中遇到下载缓慢之类的问题的话,你的网络可能魔法和更多的科学. 关于轻量化,我的理解是相对于vs这类大型IDE来说的,可以快速启动并开始使