Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > сериализация std::queue


Автор: zss 19.7.2007, 15:37
хочу сериализовать класс
Код

template <typename T, class Container = std::deque <T> >
class Queue {
private :
    friend class boost::serialization::access;

    std::queue <T, Container> m_queue;

    template <class Archive>
    void serialize (Archive& archive, const unsigned int version)
    {
        archive & BOOST_SERIALIZATION_NVP (m_queue);
    }

public :
    Queue () {}
    ~Queue() {}
};


Но что-то не нашел в boost/serialization ничего подходящего для сериализации std::queue.
 Как тогда она сериализуется ?

Автор: JackYF 19.7.2007, 15:55
Цитата(zss @  19.7.2007,  15:37 Найти цитируемый пост)
 Как тогда она сериализуется ? 

а если ручками, прошлись итератором по очереди и просериализовали каждый элемент, перед этим загнав длину очереди?

Автор: Любитель 21.7.2007, 12:25
Банальное решение основанно на следующем факте:
queue содержит лишь одно значимое (в реализации могут быть вспомогательные) поле - контейнер со стандартным именем c и описателем protected.

Код

template <typename T, typename C>
class serializable_queue: public std::queue<T, C>
{
    friend class boost::serialization::access;
    
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version)
    { ar & c; }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)