2013-05-17 106 views
1

我正在試圖構建一個像結構的樹來進行由一系列問題組成的測試。Boost序列化樹結構

的想法是,測試,提問,QuestionPart都會從下面的類派生:我嘗試了

class Node 
{  
    friend class boost::serialization::access; 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & boost::serialization::make_nvp("children", m_children); 
     ar & boost::serialization::make_nvp("intro", m_intro); 
    } 

public: 
    Node(){}; 
    virtual ~Node(){}; 

    virtual void addChildNode(Node* _child);  
    virtual const std::string getIntro() const; 
    virtual Node* getChild(const _index) const; 
    virtual void setIntro(std::string _intro); 

protected: 
    std::vector<Node*> m_children; 
    std::string m_intro; 
}; 

之前做的所有其他類如下:

void saveTest(const Node &test, const char* filename) 
{ 
    // make an archive 
    std::ofstream ofs(filename); 
    boost::archive::xml_oarchive oa(ofs); 
    oa << BOOST_SERIALIZATION_NVP(test); 
} 

void createTest() 
{ 
    Node* test = new Node(); 
    Node* question1 = new Node(); 

    question1->setIntro("Question 1"); 

    test->addChildNode(question1); 
    test->setIntro("Test"); 

    saveTest(*test, fileLocation.c_str()); 
} 

但是,這是拋出異常並只創建以下內容:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<!DOCTYPE boost_serialization> 
<boost_serialization signature="serialization::archive" version="10"> 
<test class_id="0" tracking_level="1" version="0" object_id="_0"> 
<children class_id_reference="0" object_id="_1"> 
    <children</boost_serialization> 

任何insigh噸將不勝感激。

+0

您是否考慮使用boost property_tree? – ppl

+0

我已經看到它提到,並會看看,謝謝你的建議。 – henryprescott

回答

1

原來是一個簡單的修復;看過一個例子here,我改變了以下內容:

std::vector<Node*> m_children; 

boost::ptr_vector<Node> m_children; 

這需要以下包括:

#include <boost/ptr_container/serialize_ptr_vector.hpp> 

不過,我不知道爲什麼這個工程(對象沒有被追蹤?),所以一個解釋將是受歡迎的!