Как мне слить / обновить boost :: property_tree :: ptree?

Я прочитал документацию по boost :: property_tree и не нашел способа обновить или объединить одно ptree с другим ptree. Как мне это сделать?

Как будет выглядеть функция update_ptree с учетом приведенного ниже кода?

#include <iostream>
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;

class A
{
  ptree pt_;
public:
  void set_ptree(const ptree &pt)
  {
    pt_ = pt;
  };
  void update_ptree(const ptree &pt)
  {
    //How do I merge/update a ptree?
  };
  ptree get_ptree()
  {
    return pt_;
  };
};

int main()
{
  A a;
  ptree pt;
  pt.put<int>("first.number",0);
  pt.put<int>("second.number",1);
  pt.put<int>("third.number",2);
  a.set_ptree(pt);
  ptree pta = a.get_ptree();

  //prints "0 1 2"
  std::cout << pta.get<int>("first.number") << " "
            << pta.get<int>("second.number") << " "
            << pta.get<int>("third.number") << "\n";


  ptree updates;
  updates.put<int>("first.number",7);
  a.update_ptree(updates);
  pta = a.get_ptree();

  //Because the update_tree function doesn't do anything it just prints "0 1 2".
  //I would like to see "7 1 2"
  std::cout << pta.get<int>("first.number") << " " 
            << pta.get<int>("second.number") << " " 
            << pta.get<int>("third.number") << "\n";

  return 0;
}

Я подумал о повторении нового ptree и использовании "put" для вставки значений. Но для "put" требуется тип, и я не знаю, как получить эту информацию из нового ptree и использовать ее в качестве аргумента для старого ptree.

Одна вещь, которую я пробовал в функции update_ptree, - это использовать:

pt_.add_child(".",pt);

Обычно я пытаюсь добавить pt как дочерний элемент к корню pt_. К сожалению, это не работает.

Есть идеи?

Я благодарен за любую помощь.

Спасибо.

(Я пытался добавить к этому вопросу теги property_tree и ptree, но мне это не разрешили)

16
задан rcollyer 16 November 2011 в 16:04
поделиться