2011-10-14 94 views
1

是否可以存储指向boost属性树中的对象的指针,然后使用迭代器检索数据?我试着这样做:用于存储指针的Boost property_tree

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

,然后通过递归所有的树节点的东西,如itererate:

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:错误:在词汇投射线的'流>>输出'中与'运算符>>'不匹配。

并添加以下为myObject没有帮助

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

我也试过ç蒙上和动态类型转换无济于事。

在ptree中甚至可能使用指针吗?我想创建自己的树形结构作为解决方法,我想我会先在这里问。

干杯。

回答

0

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

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

+0

感谢您的信息。我开始感觉到财产树不是在这里使用的工具。我最终使用ptree的基本结构创建了我自己的树数据结构。 – gmcc051

0

它看起来很像你想要的序列化解决方案。我介绍一些地面(包括通过指针存储)在此信息:

copying and repopulating a struct instance with pointers

该实施例还示出了串行化到XML,含集合(潜在地)重复指针。关于反序列化,指针将被重建(包括重复)。