gpt4 book ai didi

boost-propertytree - 我们如何在另一个 boost ptree 中插入一个 boost ptree 作为节点?

转载 作者:行者123 更新时间:2023-12-01 10:00:17 27 4
gpt4 key购买 nike

我想在 C++ 中序列化分层数据结构。我正在处理的项目使用 boost,所以我使用 boost::property_tree::ptree 作为我的数据节点结构。

我们有像 Person 这样的高级结构,其中包含像 Job 这样的低级结构的实例(每个人都有一份工作)。 PersonJob 各自实现了一个 ptreeify 方法。这个想法是通过让每个对象在它包含的每个其他对象上调用 ptreeify 来序列化层次结构。然后将生成的子对象的属性树作为节点插入到包含对象的属性树中。问题是我不知道如何实际进行插入。

关注 this SO post导致运行时错误。我缺乏了解导致它的原因所需的知识/经验。请参阅下面的代码。

我还找到了 this very similar question但我根本不明白答案,我怀疑使用 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");
}

最佳答案

事实证明这真的很简单。你使用 put_child

ptree Person::ptreeify(){
ptree pt;
pt.put("name", name);

ptree jobPt;
jobPt = job.ptreeify();
pt.put_child("job", jobPt);
return pt;
}

关于boost-propertytree - 我们如何在另一个 boost ptree 中插入一个 boost ptree 作为节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com