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> // 在 ...
随机推荐
- hdu 5402 Travelling Salesman Problem(大模拟)
Problem Description Teacher Mai ,) to the bottom right corner (n,m). He can choose one direction and ...
- ubuntu14.04折腾迅雷xware
迅雷一直没有出linux版,wine不想去弄.linux下虽然也有各种bt软件,无奈我试用后却发现速度远比不上迅雷,甚至有些资源根本找不到.而有些迅雷的专用链接,更是没法下(原谅我2M的小水管,却喜欢 ...
- (转)iOS7界面设计规范(4) - UI基础 - 布局
好吧,第四篇的样子,节奏还好:我怎么又是刚吃过小龙虾的状况呢. 今天的话题是布局,篇幅很短:我自己好喜欢这样,在还有些剩余时间和精力的情况下,一个话题一个话题的推进,做做译文,并热切的希望这些内容在自 ...
- (转)iOS Wow体验 - 第四章 - 为应用的上下文环境而设计
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第四章译文精选,其余章节将陆续放出.上一篇:Wow ...
- C# winform带进度条的图片下载
代码如下: public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void ...
- PL/SQL破解方法(不需要注册码)
打开注册表在run下输入regedit删除1.HKEY_CURRENT_USER/Software/Allround Automations2.HKEY_CURRENT_USER/Software/M ...
- WebApi2官网学习记录---Configuring
Configuration Settings WebAPI中的configuration settings定义在HttpConfiguration中.有一下成员: DependencyResolver ...
- Ado.net对象
Connection对象主要提供与数据库的连接功能 Command 对象用于返回数据,修改数据,运行存储过程以及发送或检索参数信息的数据库命令. DataReader对象通过Command对象提供从数 ...
- Android--------- SD卡存储文件报错解决
##文件找不到 1.没有写write权限 2.没有判断文件夹是否存在,不存在则创建
- C#基本语句与C++区别
条件语句必须为bool表达式 int a = 1; if(a) { ... } 在c++中可以,但c#报错 但 bool b = true;//不能写成b = 1了: if(b) { ... } 是可 ...