在类boost中序列化一个类

时间:2013-03-11 14:40:27

标签: c++ class boost-serialization

我尝试在BOOST的帮助下序列化一个类MFace

// class of the face
class MFace
{
     public:
         //constructor
         MFace();
     private:

    //! Vector of the face nodes
        mymath::Vector<DG::MNode*> Nodes;

        friend class boost::serialization::access;
        template<class Archive>
            void serialize(Archive & ar, const unsigned int version){
                //! Vector of the face nodes
                ar & Nodes;
            }
 };

但该类包含另一个类

mymath::Vector<MNode*> Nodes;

所以,当我尝试将Nodes写入档案

//create a face
MFace Face;

//archive output file
std::ofstream ofs("output.txt");
boost::archive::text_oarchive ar(ofs);
// Write data to archive
ar & Face;
    ...

编译器给我一个错误

error: ‘class mymath::Vector<DG::MNode*>’ has no member named ‘serialize’

我应该为MFace使用的每个类添加另一个'序列化'(特别是mymath :: Vector和MNodes)并描述它应该做什么,或者它是否有可能在MFace中解决它而不接触其他类?

包含

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
//contains mymath::Vector<>
#include "mymath/vector.h"

//containes MNodes
#include "MNode.h"
#include <fstream>

1 个答案:

答案 0 :(得分:1)

如果我正确记住我的助推序列化......

您可以添加到MFace内部的序列化方法,如下所示:

void serialize(Archive & ar, const unsigned int version){
//of the face nodes
    for( <loop to travel through each node in the Nodes vector> )
    {
        ar & currentNode.var1;
        ar & currentNode.var2;
        ar & currentNode.var3;
    }
}

这假设Node对象内部的每个成员都是boost库可以序列化的类型。

然而,问题在于您将MFace类完全耦合到MNode类型 - 也就是说,如果向MNode添加成员,则必须记住将其添加到MFace类的序列化中。

此外,如果你向MFace类添加任何类型的复杂对象,boost不知道如何序列化,那么你必须按成员序列化该成员。

每个对象的序列化最好知道如何序列化自身 - 序列化的定义应该包含在每个类的serialize()方法中。

如果将序列化方法添加到DG :: MNode类,则此问题应该消失。

相关问题