我的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的更多相关文章

  1. XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

    XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格 ...

  2. JAXP使用Stax API时格式化输出XML

    最近项目中需要生成XBRL instance,对于XML读写和验证进行了一些学习.由于Stax API不支持格式化输出,默认全都写在一行上,网上也没有搜到现成的东西,自己写了一个格式化输出的帮助类. ...

  3. JAXP使用Stax API时格式化输出XML 2

    之前实现的一个版本:http://www.cnblogs.com/lyhtbc/p/jaxp-pretty-format-validate-validation-stax-stax2.html 这个版 ...

  4. WPF中任意Object的XAML代码格式化输出

    原文:WPF中任意Object的XAML代码格式化输出 有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter ...

  5. Java - 格式化输出JSON字符串的两种方式

    目录 1 使用阿里的fastjson 1.1 项目的pom.xml依赖 1.2 Java示例代码 2 使用谷歌的gson 2.1 项目的pom.xml依赖 2.2 Java示例代码 1 使用阿里的fa ...

  6. .NET宝藏API之:OutputFormatter,格式化输出对象

    相信大家在项目中都用过统一响应参数模板. 先声明一个响应模板类: public class ResponseDto { public int code { get; set; } public str ...

  7. python的print函数的格式化输出

    使用print函数的时候,可以像C一样格式化输出,同时还支持参数化输出 print('%s' % ("CooMark")) print('整数|%d|' % (123)) prin ...

  8. python学习笔记(基础二:注释、用户输入、格式化输出)

    注释 单行:# 多行:上下各用3个连续单引号或双引号 3个引号除了多行注释,还可以打印多行 举例: msg = ''' name = "Alex Li" name2 = name ...

  9. cout 格式化输出

    一直习惯于C语言的printf函数来打印,突然有一天要用cout来打印,发现有点不适应. 原来cout也是有格式化输出的. 首先要引入头文件 #include<iostream> // 在 ...

随机推荐

  1. JS时间操作

    /** * 判断年份是否为润年 * * @param {Number} year */ function isLeapYear(year) { return (year % 400 == 0) || ...

  2. [Redux] Passing the Store Down with <Provider> from React Redux

    Previously, we wrote the Provider component by ourself: class Provider extends Component { getChildC ...

  3. AIX 常用命令和知识

      BOOTLIST:#bootlist -m normal -o (查看bootlist)#bootlist -m normal (设置bootlist为空,谁要在我机器上执行我就要哭了)#boot ...

  4. 《第一行代码》学习笔记18-广播接收器Broadcast_Receiver(1)

    1.网络通信原理,在一个IP网络范围内最大的IP地址是被保留作为广播地址来使用的.某个网络的IP 范围是192.168.0.XXX, 子网掩码是255.255.255.0,则该网络的广播地址是192. ...

  5. 如何安装Windows Live Writer插件

    Windows Live Writer 是一个强大的离线博客编辑工具,通过它可以离线编辑内容丰富的博文.它不但支持微软的live space,还支持诸如Wordpress 这样的开源博客系统. Win ...

  6. dispatch_async 与 dispatch_get_global_queue 的使用方法

    GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...

  7. poj3301 三分

    Texas Trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4998   Accepted: 1559 Descri ...

  8. BestCoder Round #36 (hdu5199)Gunner(水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Gunner Time Limit: 8000/4000 MS (Java/Oth ...

  9. T-SQL语句——UNION, EXCEPT, INTERSECT

    UNION,EXCEPT, INTERSECT关键字用于对集合的查询,它们的作用分别为: UNION:合并两个或多个 SELECT 语句的结果集,并把重复结果去除: UNIONALL:合并两个或多个 ...

  10. FileUtils类应该有哪些内容

    源码:https://github.com/kymjs/KJFrameForAndroid Environment类的使用:http://www.2cto.com/kf/201408/327215.h ...