2016-03-24 2 views
1

У меня есть следующее дерево свойств.Boost: Как добавить дочернее дерево в существующее дерево

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

Вы что-то еще по-другому, что вы не показывая:

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

Для развлечения, версия с UDLS: [ Live On Coliru] (http://coliru.stacked-crooked.com/a/658842e2d5e040fc) – sehe

+0

Спасибо. Мне не хватало использования ссылки, когда я получал pt.get_child («propset1»); и, следовательно, каждый раз добавляли дочерние узлы в новый объект. – AnilJ

Смежные вопросы