c++ - 将 write_xml 提升到包含在 back_insert_device 中的向量会产生 0 大小的向量
问题描述
在下面的代码中,为什么向量 'v' 的大小为 0?如果将 write_xml 传递给 stringstream,则代码可以正常工作。但我宁愿在最终转储文本 XML 时不必支付字符串分配的成本。
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <vector>
#include <iostream>
using namespace boost::iostreams;
int main()
{
boost::property_tree::ptree pt;
pt.put("file.name", "testf");
pt.put("file.type", "xml");
pt.put("file.size", 0);
std::vector<char> v;
back_insert_device<std::vector<char>> sink{v};
stream<back_insert_device<std::vector<char>>> os{sink};
boost::property_tree::write_xml(os, pt);
std::cout << v.size() << std::endl;
}
解决方案
您忘记刷新流。您可以os.flush()
或只是让析构函数处理它:
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
#include <vector>
using namespace boost::iostreams;
int main()
{
boost::property_tree::ptree pt;
pt.put("file.name", "testf");
pt.put("file.type", "xml");
pt.put("file.size", 0);
std::vector<char> v;
{
back_insert_device<std::vector<char>> sink{v};
stream<back_insert_device<std::vector<char>>> os{sink};
boost::property_tree::write_xml(os, pt);
}
std::cout << v.size() << std::endl;
}
印刷
100
奖金
一如既往,使用 JSON 库!
#include <boost/json.hpp>
#include <boost/json/src.hpp>
#include <iostream>
namespace json = boost::json;
int main() {
json::object file{
{"name", "testf"},
{"type", "xml"},
{"size", 0},
};
auto v = serialize(json::object{{"file", file}});
std::cout << v.size() << ": " << v << std::endl;
}
印刷
47: {"file":{"name":"testf","type":"xml","size":0}}
推荐阅读
- json - React:使用 Reducer 访问嵌套状态项
- javascript - 使用 script 标签作为 declarativeContent.PageStateMatcher 的 CSS 条件
- r - 读取具有多个列标题的数据
- cloudflare - 使用工作人员控制 cloudflare 源服务器
- json - 快速登录应用程序后,主视图控制器没有响应
- django - 自定义注册表。确认密码
- mysql - 为什么我的 post 方法在添加 htacess 文件后只发送 1 行表数据?
- javascript - 在不修改 Amplify 库的情况下访问错误响应
- makefile - makefile 中的 '$$directoryName' 和 '$(directoryName)' 有什么区别
- php - PHP:读取和写回文件的问题