Проблема в сериализации вектора запросов с использованием Boost - PullRequest
0 голосов
/ 03 октября 2011

Как мне сериализовать вектор запросов, используя библиотеку Boost Serialization.

В настоящее время для этой цели у меня есть следующий код:

#include <boost/serialization/deque.hpp> //in includes

Item1(6128, std::deque<float> ()), //constructor initializations
Item2(6128, std::deque<float> ()),
Item3(6128,std::deque<int> ()),
Item4(6128,std::deque<int> ()),

private:
 friend class boost::serialization::access;
 template <typename Archive>
 void
serialize(Archive &ar,
    const unsigned int /*file_version*/)
{

for (unsigned i = 0; i < Item1.size(); ++i)
{ar & Item1[i];}
for (unsigned i = 0; i < Item2.size(); ++i)
{ar & Item2[i];}
for (unsigned i = 0; i < Item3.size(); ++i)
{ar & Item3[i];}
for (unsigned i = 0; i < Item4.size(); ++i)
{ar & Item4[i];}

}

std::vector< std::deque<float> > Item1, Item2;
std::vector< std::deque<int> > Item3, Item4;

Этот код компилируется и работает нормально. Однако значения, которые я храню, отличаются от тех, которые я загружал при сериализации. Я делаю что-то неправильно? Это правильный метод для сериализации вектора запросов?

Ваш отзыв приветствуется. Спасибо!

1 Ответ

2 голосов
/ 03 октября 2011

Вы не сериализуете размер Item1 ... Item4

Я предлагаю вам использовать сериализацию контейнера STL напрямую:

  1. http://www.boost.org/doc/libs/1_47_0/libs/serialization/doc/tutorial.html#stl
  2. http://www.boost.org/doc/libs/1_47_0/libs/serialization/doc/serialization.html#models

, например

ar & Item1;
ar & Item2;
ar & Item3;
ar & Item4;

В качестве альтернативы вы можете разделить методы загрузки / сохранения и явно сохранить / загрузить размер контейнера. template<class Archive> void save(Archive & ar, const unsigned int version) const { ar & Item1.size(); for (unsigned i = 0; i < Item1.size(); ++i) {ar & Item1[i];} ar & Item2.size(); for (unsigned i = 0; i < Item2.size(); ++i) {ar & Item2[i];} // etc... } template<class Archive> void load(Archive & ar, const unsigned int version) { size_t size; ar & size; Item1.resize(size); for (unsigned i = 0; i < Item1.size(); ++i) {ar & Item1[i];} ar & size; Item2.resize(size); for (unsigned i = 0; i < Item2.size(); ++i) {ar & Item2[i];} // etc... } BOOST_SERIALIZATION_SPLIT_MEMBER()

...