【问题标题】:Issue in serializing a vector of deques using Boost使用 Boost 序列化双端队列向量的问题
【发布时间】:2011-10-03 07:40:17
【问题描述】:

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

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

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

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

感谢您的反馈。谢谢!

【问题讨论】:

    标签: c++ serialization boost


    【解决方案1】:

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

    或者,您可以拆分为 Load/Save 方法并显式保存/加载容器大小。

    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()
    

    【讨论】:

    • 你的意思是:-`private:朋友类 boost::serialization::access;模板 void serialize(Archive &ar, const unsigned int /*file_version*/) { ar & Item1 & Item2 & Item3 & Item4; } ` 我确实先尝试过,但这对于双端队列的向量也不起作用。
    • 抱歉,我看不懂。另外,如果您需要替代方案,我已经更新了问题
    • 我为这个混乱道歉。我正在尝试在 cmets 中正确获取代码,但它没有在 cmets 框中正确通过。给我一分钟。
    • @mahajan_l33t:您可以编辑问题或...阅读我的回复:)。您是否包含&lt;boost/serialization/vector.hpp&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 2011-10-14
    • 2018-05-18
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2013-05-21
    相关资源
    最近更新 更多