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

时间:2016-03-24 08:47:34

标签: boost boost-propertytree

我有以下属性树。

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​​?

1 个答案:

答案 0 :(得分:1)

你还有其他不同的东西,你没有表现出来:

<强> 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
    }
}