Увеличить свойство property_tree для хранения указателей - PullRequest
1 голос
/ 14 октября 2011

Можно ли хранить указатели на объекты в деревьях свойств boost, а затем использовать итератор для извлечения данных?Я пытаюсь сделать что-то вроде:

property_tree::ptree pt;
pt.put<CGUICrateElement*>("1.2.3.4", new MyObject() );
//... more tree construction here...

, а затем рекурсивно перебрать все узлы дерева с чем-то вроде:

property_tree::ptree::iterator iter = treeNode.begin();
property_tree::ptree::iterator iter_end = treeNode.end();

for ( ; iter != iter_end; ++iter )
{
MyObject *obj = lexical_cast<MyObject*>(iter->second.data());
    //... etc 

Проблема в том, что я получаю ошибку lexical_cast.hpp: 1112: ошибка: нет совпадения для 'operator >>' в 'stream >> output' на лексической линии приведения.

и добавление следующего к MyObject не помогает

friend std::istream& operator>>(std::istream& in, MyObject& obj){ return in; }

Я также пробовал c и динамические приведения безрезультатно.

Возможно ли даже использование указателей внутри дерева?Я собираюсь просто создать свою собственную древовидную структуру в качестве обходного пути, я решил сначала спросить здесь.

Приветствия.

Ответы [ 2 ]

0 голосов
/ 14 октября 2011

Это выглядит так, будто вы хотели сериализовать решение. Я рассмотрел некоторые вопросы (в том числе хранение указателей) в этом посте:

копирование и повторное заполнение экземпляра структуры с помощью указателей

В этом примере также показана сериализация в XML - коллекции, содержащие (потенциально) дублированные указатели. При десериализации указатели будут точно восстановлены (включая дублирование).

0 голосов
/ 14 октября 2011

Добавление оператора >> для ссылки на MyObject не поможет, когда вы на самом деле пытаетесь передать lexical_cast на указатель на MyObject. Вы можете создать operator>>(std::istream&, MyObject*&). Однако помните, что свойство property_tree предназначено для чтения конфигурации из текстовых файлов, поэтому вы сможете преобразовать свой объект в текст и из него.

Не используйте property_tree в качестве общей структуры данных. Внутренне он будет иметь дело с текстом.

...