Boost:如何将子树添加到现有树中

Boost: How to add child tree into an existing tree

我有以下 属性 树。

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 7
}

我正在尝试向其中添加几棵子树,以便生成的 属性 树如下所示。

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset1
    {
        child1prop1 4
        child1prop1 6
        child1prop1 9
    }

    childset2
    {
        child2prop1 2
        child2prop1 6
        child2prop1 7
    }
}

我写了下面的代码。

// Add General config
pt::ptree propset1;
propset1.put("propset1.prop1", 2);
propset1.put("propset1.prop2", 5);
propset1.put("propset1.prop3", 60);
propset1.put("propset1.prop4", 7);

// Add childset1 config
pt::ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);

// Add childset2 config
pt::ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);

但是上面的代码会生成下面的 属性 树。

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset1
    {
        child1prop1 4
        child1prop1 6
        child1prop1 9
    }
}

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset2
    {
        child2prop1 2
        child2prop1 6
        child2prop1 7
    }
}

有人可以建议 API 的正确用法吗?

你是另一种你没有表现出来的东西:

Live On Coliru

#include <boost/property_tree/info_parser.hpp>
#include <sstream>
#include <iostream>

using boost::property_tree::ptree;

int main() {
    ptree pt;
    {
        std::istringstream iss(R"(propset1
        {
            prop1 2
            prop2 5
            prop3 60
            prop4 7
        })");
        read_info(iss, pt);
    }
    auto& propset1 = pt.get_child("propset1");

    // Add childset1 config
    ptree childset1;
    childset1.add("child1prop1", 4);
    childset1.add("child1prop2", 6);
    childset1.add("child1prop3", 9);
    propset1.add_child("childset1", childset1);

    // Add childset2 config
    ptree childset2;
    childset2.add("child2prop1", 2);
    childset2.add("child2prop2", 6);
    childset2.add("child2prop3", 7);
    propset1.add_child("childset2", childset2);

    write_info(std::cout, pt);
}

打印:

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 7
    childset1
    {
        child1prop1 4
        child1prop2 6
        child1prop3 9
    }
    childset2
    {
        child2prop1 2
        child2prop2 6
        child2prop3 7
    }
}