kjo*_*ppy 3 boost-propertytree
我想在C++中序列化分层数据结构.我正在研究的项目使用boost,因此我将其boost::property_tree::ptree用作我的数据节点结构.
我们有更高级别的结构,比如Person包含较低级别结构的实例Job(每个人都有工作).Person并且Job每个都实现一个ptreeify方法.我们的想法是通过让每个对象调用ptreeify它包含的每个其他对象来序列化层次结构.然后,生成的子对象的属性树作为节点插入到包含对象的属性树中.问题是我无法弄清楚如何实际插入.
在此SO帖子之后导致运行时错误.我缺乏了解导致它的原因所需的知识/经验.见下面的代码.
我也发现了这个非常相似的问题,但我根本不理解答案,我怀疑使用insert避免复杂的问题.
问题:如何在另一个属性树中插入属性树作为节点?
这是实际的代码.运行时错误发生在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");
}
Run Code Online (Sandbox Code Playgroud)
事实证明这很简单.你用put_child
ptree Person::ptreeify(){
ptree pt;
pt.put("name", name);
ptree jobPt;
jobPt = job.ptreeify();
pt.put_child("job", jobPt);
return pt;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |