2011-10-14 40 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,含集合(潛在地)重複指針。關於反序列化,指針將被重建(包括重複)。