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

标签 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 的正确使用吗?

最佳答案

你是其他一些你没有表现出来的不同之处:

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

关于Boost:如何将子树添加到现有树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36196170/

相关文章:

c++ - 提升 json 序列化和 message_queue segfault

json - boost::property_tree::json_parser::read_json 和推特?

boost - Cmake 错误 : Could NOT find Boost (missing: Boost_INCLUDE_DIR)

没有标准库的 C++ 智能指针

c++ - 如何使用boost显示网格图?

c++ - 如何在 gnu/linux 上安装 boost

c++ - Boost XML- Property Tree - 读取 xml 的详细错误信息

c++ - 从 std::vector 中删除复制结构成员

c++ - boost 属性树 xml 编写器输出中没有行尾

c++ - 使用属性树在 Boost 中创建 JSON 数组