2013-03-25 74 views
0

我將多個數據加載到boost::archive::text_oarchive,現在我需要提取數據。 但由於存檔包含多個記錄,我需要一個迭代器。如何遍歷boost :: serialization中的存檔

//input archive 
boost::archive::text_iarchive iarch(ifs); 

//read until the end of file 
while (!iarch.eof()){ 

//read current value 
iarch >> temp; 
...//do something with temp 

} 

有遍歷存檔元素的任何標準的方式? 我只找到iarchive.iterator_type,但這是我需要的,我該如何使用它?

+1

想法如何序列化一個「記錄」向量([序列化處理STL的向量等](http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/ index.html))或最初序列化「記錄」容器中的許多元素,並在序列化容器本身之後進行序列化。 – megabyte1024 2013-03-25 14:23:52

+0

我打算說一些類似於兆字節的內容,請參閱http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html(搜索STL集合) – Caribou 2013-03-25 14:26:23

+0

是的,我正在考慮它,但事情是,我有'std :: vector '指針指向一些複雜的派生數據類型與自己的'serialize'實現爲私人,當我想推動整個載體歸檔,編譯器抱怨說,方法對象'std :: vector '中缺少'serialize',所以我不得不通過向量 – 2013-03-25 14:41:26

回答

0

你正在尋找真正的迭代器類型來自

class shared_ptr_helper { 
    ... 
    typedef std::set< 
     boost::shared_ptr<const void>, 
     collection_type_compare 
    > collection_type; 
    typedef collection_type::const_iterator iterator_type; 
這是存檔的負載過程中使用,而不是外用我覺得一個迭代器

如果你看一下鏈接http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html下教程 - > STL集合,你會看到下面的例子:

#include <boost/serialization/list.hpp> 

class bus_route 
{ 
    friend class boost::serialization::access; 
    std::list<bus_stop *> stops; 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & stops; 
    } 
public: 
    bus_route(){} 
}; 

如果不是你需要什麼相當,那麼你很可能需要看重載負荷並按照http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html#splitting 保存並根據需要添加處理。

+0

這是我最初的計劃,但編譯器說'class std :: list '沒有名爲'serialize'的成員。即使'serialize'是在Derived中實現的 – 2013-03-25 15:10:05

+0

明白了。忘記包含boost/serialization/list.hpp – 2013-03-25 15:32:42