boost格式化输出xml
我的boost为1.56而不是1.55
boost在xml的例子给出了一段写xml文件的代码,我简化如下:
void debug_settings::save(const std::string &filename)
{
using boost::property_tree::ptree;
ptree pt; pt.put("debug.filename", m_file);
pt.put("debug.level", m_level); write_xml(filename, pt);
}
这段代码写出来的格式非常难看,没有缩进的。于是在网上查找了下,需要改成下面的样子:
void debug_settings::save(const std::string &filename)
{
using boost::property_tree::ptree;
ptree pt; pt.put("debug.filename", m_file);
pt.put("debug.level", m_level); boost::property_tree::xml_writer_settings<char> settings('\t',);
write_xml(filename, pt,std::local(),settings);
}
意思是缩进1个\t,结果报了一大堆错误:
In instantiation of 'class boost::property_tree::xml_parser::xml_writer_settings<char>':
../../game_server/common/CServerSetting.cpp::: required from here
../../game_server/libraries/boost_1_56_0/boost/property_tree/detail/xml_parser_writer_settings.hpp::: error: 'char' is not a class, struct, or union type
typedef typename Str::value_type Ch;
本人水平在菜,没见过此类错误。去百度,也找不到类似的结果。看xml_parser_writer_settings的源代码,也看不懂。白白浪费了几个小时,终于受不了,翻出去请教google,很快找到了相关的解决方案:
http://www.pcl-users.org/PCL-compilation-errors-Please-help-me-td4035209.html
This is because there is a breaking API change in the boost 1.56. property_tree, as compared to boost 1.55.. For more reference, see an issue described here: link.
I fixed this by modifying:
boost::property_tree::xml_writer_settings<char> settings ('\t', );
write_xml (filename, pt, std::locale (), settings);
To:
auto settings = boost::property_tree::xml_writer_make_settings<std::string> ('\t', );
write_xml (filename, pt, std::locale (), settings);
In the or so places this occurs...
Thanks,
McDamon
http://lists.boost.org/boost-users/2014/08/82693.php
Dear all, with the release of Boost 1.56, on Ubuntu 14.04 (g++ 4.8., bit),
code like the following suddenly fails to compile: pt::xml_writer_settings<char> settings('\t', );
pt::write_xml(someFileName, ptr_out, std::locale(), settings); "pt" is obviously an alias for boost::property_tree. The error message
I'm getting is /opt/boost156/include/boost/property_tree/detail/xml_parser_writer_settings.hpp:::
error: 'char' is not a class, struct, or union type
typedef typename Str::value_type Ch; I can see the following possibly relevant change in property_tree: In Boost 1.55, from xml_parser.hpp:
----------------------------------- template<typename Ptree>
void write_xml(
const std::string &
, const Ptree &
, const std::locale & = std::locale()
, const xml_writer_settings<typename Ptree::key_type::value_type >& =
xml_writer_settings<typename Ptree::key_type::value_type >()
); In Boost 1.56, same header:
--------------------------- template<typename Ptree>
void write_xml(
const std::string &
, const Ptree &
, const std::locale & = std::locale()
, const xml_writer_settings<typename Ptree::key_type > &
= xml_writer_settings<typename Ptree::key_type >()
); So xml_writer_settings is now given a Ptree::key_type instead of a
Ptree::key_type::value_type which I assume is the reason for the above
error. Is there a portable way to specify the type of indention character in
write_xml ? Best Regards,
Beet
由于我没有启用C++11,改为这样写
boost::property_tree::xml_writer_settings<string> settings =
boost::property_tree::xml_writer_make_settings<string> (' ', );
write_xml( DEFAULTCONFIG,pt,std::locale(),settings );
问题解决。
PS:大伙以后搜索代码用这个http://www.gfsoso.com/。百度找找电影院什么的就好,搜代码实现是不靠谱。
boost格式化输出xml的更多相关文章
- XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格 ...
- JAXP使用Stax API时格式化输出XML
最近项目中需要生成XBRL instance,对于XML读写和验证进行了一些学习.由于Stax API不支持格式化输出,默认全都写在一行上,网上也没有搜到现成的东西,自己写了一个格式化输出的帮助类. ...
- JAXP使用Stax API时格式化输出XML 2
之前实现的一个版本:http://www.cnblogs.com/lyhtbc/p/jaxp-pretty-format-validate-validation-stax-stax2.html 这个版 ...
- WPF中任意Object的XAML代码格式化输出
原文:WPF中任意Object的XAML代码格式化输出 有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter ...
- Java - 格式化输出JSON字符串的两种方式
目录 1 使用阿里的fastjson 1.1 项目的pom.xml依赖 1.2 Java示例代码 2 使用谷歌的gson 2.1 项目的pom.xml依赖 2.2 Java示例代码 1 使用阿里的fa ...
- .NET宝藏API之:OutputFormatter,格式化输出对象
相信大家在项目中都用过统一响应参数模板. 先声明一个响应模板类: public class ResponseDto { public int code { get; set; } public str ...
- python的print函数的格式化输出
使用print函数的时候,可以像C一样格式化输出,同时还支持参数化输出 print('%s' % ("CooMark")) print('整数|%d|' % (123)) prin ...
- python学习笔记(基础二:注释、用户输入、格式化输出)
注释 单行:# 多行:上下各用3个连续单引号或双引号 3个引号除了多行注释,还可以打印多行 举例: msg = ''' name = "Alex Li" name2 = name ...
- cout 格式化输出
一直习惯于C语言的printf函数来打印,突然有一天要用cout来打印,发现有点不适应. 原来cout也是有格式化输出的. 首先要引入头文件 #include<iostream> // 在 ...
随机推荐
- 在ubuntu14.04上部署hadoop2.6.3
一.在Ubuntu下创建hadoop组和hadoop用户 增加hadoop用户组,同时在该组里增加hadoop用户,后续在涉及到hadoop操作时,我们使用该用户. 1.创建hadoop用户组 2.创 ...
- Git冲突解决方案
Git冲突解决方案 1. 在代码提交时,先更新,若有冲突.先解决冲突.若提交之后在review时才发现无法合并代码时有冲突,需要abandon此次提交的代码. 2. 解决冲突的基本做法,保存本地代 ...
- Android Studio使用技巧系列教程(二)
尊重劳动成果,转载请注明出处:http://blog.csdn.net/growth58/article/details/46764575 关注新浪微博:@于卫国 邮箱:yuweiguocn@gmai ...
- [RxJS] Combining Streams with CombineLatest
Two streams often need to work together to produce the values you’ll need. This lesson shows how to ...
- Swift纯代码走进UICollectionView
Swift对于一门新的iOS编程语言,他的崛起是必然的 我们这群老程序员们学习新的技能也是必然的 不接受新技能将被这大群体无情的淘汰 So 我欣然接受这门看似不成熟的语言 下面我们说说Swift中比较 ...
- php:兄弟连之面向对象版图形计算器1
曾经看细说PHP的时候就想做这个,可是一直没什么时间,这次总算忙里偷闲搞了代码量比較多的project. 首先,文档结构,都在一个文件夹下就好了,我的就例如以下. 一開始,进入index.php文件. ...
- Kerberos-KDC
Kerberos提供一种较好的解决方案,它是由MIT发明的,Kerberos建立了一个安全的.可信任的密钥分发中心(KDC, Key Distribution Center).Kerberos是一种认 ...
- My way on Linux - 知识梳理计划
知识梳理计划图 近期计划把自己学习的工作中用到的Linux知识梳理下,敬请期待.
- NFinal 揭秘之控制器
用NFinal框架开发的项目类似于MVC的那种开发方式,有Controller层.Model层.View层,还包括表现层Web层,在NFinal开发的项目中真正执行的代码也就是Web层中的代码,Web ...
- 分页搜索查询sql
select * from (select t.*,rownum no from " + table + " t where scbj=0)where (no>(" ...