首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在另一个boost ptree中插入一个boost ptree作为节点?

如何在另一个boost ptree中插入一个boost ptree作为节点?
EN

Stack Overflow用户
提问于 2013-06-16 19:01:15
回答 1查看 5K关注 0票数 3

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

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

遵循this SO post会导致运行时错误。我缺乏所需的知识/经验来理解是什么造成的。请参阅下面的代码。

我也找到了this very similar question,但我一点也不明白答案,我怀疑使用insert可以避免出现复杂的情况。

问题:如何将属性树作为节点插入到另一个属性树中?

这是实际的代码。运行时错误发生在Person::ptreeify中。

代码语言:javascript
复制
#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");
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-17 06:41:42

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

代码语言:javascript
复制
ptree Person::ptreeify(){
    ptree pt;
    pt.put("name", name);

    ptree jobPt;
    jobPt = job.ptreeify();
    pt.put_child("job", jobPt);
    return pt;
    }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17136668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档