boost-propertytree – 我们如何在另一个boost ptree中插入boost
发布时间:2020-12-16 09:45:34 所属栏目:百科 来源:网络整理
导读:我想在C中序列化分层数据结构.我正在研究的项目使用boost,所以我使用boost :: property_tree :: ptree作为我的数据节点结构. 我们有更高级别的结构,比如Person,它包含像Job这样的低级结构实例(每个人都有一份工作). Person和Job各自实现了一个ptreeify方法.
我想在C中序列化分层数据结构.我正在研究的项目使用boost,所以我使用boost :: property_tree :: ptree作为我的数据节点结构.
我们有更高级别的结构,比如Person,它包含像Job这样的低级结构实例(每个人都有一份工作). Person和Job各自实现了一个ptreeify方法.我们的想法是通过让每个对象在它包含的每个其他对象上调用ptreeify来序列化层次结构.然后,生成的子对象的属性树作为节点插入到包含对象的属性树中.问题是我无法弄清楚如何实际插入. 在this SO post之后导致运行时错误.我缺乏了解导致它的原因所需的知识/经验.见下面的代码. 我也找到了this very similar question,但我完全不理解答案,我怀疑插入的使用避免了那里发现的并发症. 问题:如何在另一个属性树中插入属性树作为节点? 这是实际的代码.运行时错误发生在Person :: ptreeify中. #include <boost/property_tree/json_parser.hpp> using boost::property_tree::ptree; using namespace std; struct Job{ std::string title; int hoursPerWeek; ptree ptreeify(void); //return a ptree representing this Job }; ptree Job::ptreeify(){ ptree pt; pt.put("title",title); pt.put("hours",hoursPerWeek); return pt; } struct Person{ std::string name; Job job; ptree ptreeify(void); //return a ptree representing this Person //This must iterively call ptreeify on all sub-objects void save(const std::string &filename); //write this Person to file }; ptree Person::ptreeify(){ ptree pt; pt.put("name",name); pt.put("job",""); ptree jobPt; jobPt = job.ptreeify(); std::cout << "Program dies after this line" << std::endl; //This next line causes a run time error pt.insert(pt.get_child("job").begin(),jobPt.begin(),jobPt.end()); return pt; } void Person::save(const std::string &filename){ ptree pt; pt = ptreeify(); write_json(filename,pt); }; int main(){ Person myPerson; myPerson.name = "Julius"; Job myJob; myJob.title = "monkey"; myJob.hoursPerWeek = 40; myPerson.job = myJob; myPerson.save("myPerson.dat"); } 解决方法
事实证明这很简单.你使用put_child
ptree Person::ptreeify(){ ptree pt; pt.put("name",name); ptree jobPt; jobPt = job.ptreeify(); pt.put_child("job",jobPt); return pt; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ios – 在iPhone上安装Facebook应用程序时,Facebook登录失败
- cocos2d-x 3.x label 功能详解,包括行列间距等细节问题
- [cocos2dx]cocos2dx-lua中class语法
- 在 Swift 中使用 SETTINGS BUNDLES
- FastJSON使用案例(fastjson-1.1.28.jar)
- ruby-on-rails – 将所有控制器参数从camelCase转换为Rails
- VB.net学习笔记(二十四)线程基础
- React+webpack+Antd从0到1开发一个todoMvc
- codeforce-1201-C题解
- ruby-on-rails – 在失败的save()之后Rails没有回滚事务