序列化对象的载体,它包含指针的向量(Serializing Vector of Objects wh

2019-10-18 08:41发布

我有3类(“领袖”,“研究”,“工人”),所有从基类“团队”获得。

我有一个类“项目”,其中包含指向不同球队的载体。

我使用所有的下列头,在这个秩序,我所有的类声明:

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

要(反)序列我​​使用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 ;
}

项目持有指向不同的团队,使用字符串一个std ::向量:

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

我用在项目类序列化下面的代码:

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

并且将序列号我用的主要项目对象的矢量:

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

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

Answer 1:

作为纳米的链接:您需要升压登记类,以便它知道哪些类连载时的东西。

您需要添加以下行的每个类,其中“项目”连载:

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


文章来源: Serializing Vector of Objects which contains Vectors of Pointers