提升property_tree用于存储指针

时间:2011-10-14 06:50:15

标签: c++ pointers boost tree properties

是否可以存储指向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&gt;&gt;'在'stream&gt;&gt;输出'在词汇铸造线上。

并将以下内容添加到MyObject无济于事

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

我也试过c演员表和动态演员表无济于事。

在ptree中是否可以使用指针?我将创建自己的树结构作为一种解决方法,我想我先问这里。

干杯。

2 个答案:

答案 0 :(得分:0)

添加运算符&gt;&gt;当您实际尝试lexical_cast到指针到MyObject时,对MyObject的引用不会有帮助。你可以想象创建一个operator>>(std::istream&, MyObject*&)。但是,请记住,property_tree旨在从文本文件中读取配置,因此您可以将对象转换为文本和从文本转换。

不要将property_tree用作通用数据结构。在内部,它将期待处理文本。

答案 1 :(得分:0)

看起来很像你想要一个序列化解决方案。我在这篇文章中介绍了一些基础(包括通过指针存储):

copying and repopulating a struct instance with pointers

此示例还显示了对XML的序列化,包含(可能)重复指针的集合。在反序列化时,指针将被忠实地重建(包括复制)。