我有以下属性树。
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?
答案 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
}
}