【问题标题】:Boost property_tree for storing pointersBoost property_tree 用于存储指针
【发布时间】:2011-10-14 06:50:14
【问题描述】:

是否可以在 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: error: no match for 'operator>>' in 'stream >> output' 在词法转换行上。

将以下内容添加到 MyObject 没有帮助

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

我也尝试过 c 强制转换和动态强制转换,但无济于事。

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

干杯。

【问题讨论】:

    标签: c++ pointers boost tree properties


    【解决方案1】:
    当您实际尝试将 lexical_cast 转换为指向 MyObject 的 指针 时,

    添加运算符>> 以引用 MyObject 将无济于事。您可以想象创建一个operator&gt;&gt;(std::istream&amp;, MyObject*&amp;)。但是,请记住,property_tree 是为从文本文件中读取配置而设计的,因此您将享受将对象与文本相互转换的乐趣。

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

    【讨论】:

    • 感谢您的信息。我开始觉得属性树不是在这里使用的工具。我最终使用 ptree 的基本结构创建了自己的树数据结构。
    【解决方案2】:

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

    copying and repopulating a struct instance with pointers

    这个例子还展示了到 XML 的序列化,包含(可能)重复指针的集合。在反序列化时,指针将被忠实地重建(包括重复)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多