c++ - 使用 Boost 序列化双端队列 vector 的问题

标签 c++ serialization boost

如何使用 Boost 序列化库序列化双端队列 vector 。

目前,我有以下代码用于此目的:

#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;

此代码编译并运行良好。但是,我存储的值与序列化时加载的值不同。难道我做错了什么?这是序列化双端队列 vector 的正确方法吗?

感谢您的反馈。谢谢!

最佳答案

您没有序列化 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()

关于c++ - 使用 Boost 序列化双端队列 vector 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632245/

相关文章:

c++ - 为什么 “using namespace std;”被视为不良做法?

c++ - 使用 boost fibonacci_heap

c# - 以编程方式设置属性以从序列化中排除

java - Android 2.2 上的 Apache MINA 中的 NullPointerException

python - Python 中的可序列化静态类变量

python - 如何判断 libboost_python.so 使用的是什么 python 版本?

c++ - boost spirit 语义 Action 要求

c++ - C++ 模板参数上的“if”语句

c++ - 将文件加载到 vector <char>

c++ - 在 C++ 中调用 "system"时抑制控制台