序列化包含指针向量的对象向量

时间:2013-07-14 13:59:46

标签: c++ serialization boost boost-serialization

我有3个班级(“领导者”,“研究人员”,“工人”),这些班级都来自基层“团队”。

我有一个“Project”类,其中包含指向不同团队的指针向量。

我在所有类声明中按此顺序使用以下所有标题:

#include <sstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/split_member.hpp>

要(de)序列化我使用的Team对象:

private:
  friend class boost::serialization::access ;

  template <typename Archive>
  void serialize(Archive& ar, const unsigned int /*version*/)
  {
      ar & teamname ;
  }

要(我)序列化我使用的领导者,研究人员,工人对象:

typedef Team _super;

friend class boost::serialization::access ;

template <typename Archive>
void serialize(Archive& ar, const unsigned int /*version*/)
{
    ar & boost::serialization::base_object<_super>(*this) ;
    ar & contactTelephoneNumber ;
}

Project使用以下命令持有std ::指向不同团队的指针和一个字符串:

std::vector<Team *> teams ;
std::string note ;

我在Project类中使用以下代码进行序列化:

private:
  friend class boost::serialization::access ;

  template <typename Archive>
  void serialize(Archive& ar, const unsigned int /*version*/)
  {
      //ar & BOOST_SERIALIZATION_NVP(teams) ; //ERROR OCCURS HERE
      ar & teams;
      ar & note ;
  }

为了序列化我主要使用的Project对象的向量:

{
    std::ostringstream archiveStream ;
    boost::archive::text_oarchive archive(archiveStream) ;
    archive << BOOST_SERIALIZATION_NVP(projects) ;

    //Get serialized info as string
    archivedProjects = archiveStream.str() ;
}

这一切都很好。问题出在运行时。到达代码的上述部分时,我收到以下错误:

terminate called after throwing an instance of 'boost::archive::archive_exception' 
what(): 
    unregistered class - derevided class not registered or exported"

该计划如下:

ar & teams;

在问卷调查班的序列化尝试中。

1 个答案:

答案 0 :(得分:1)

与n.m.的链接一样:您需要使用Boost注册类,以便在序列化时知道哪些类是什么。

您需要为“Project”序列化的每个类添加以下行:

ar.template register_type<ClassName>() ; //ClassName = Team etc