【问题标题】:Serializing Vector of Objects which contains Vectors of Pointers序列化包含指针向量的对象向量
【发布时间】:2013-07-12 11:30:37
【问题描述】:

我有 3 个类(“Leader”、“Researchers”、“Workers”),它们都派生自一个基类“Team”。

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

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

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

要(反)序列化我使用的 Leader、Researchers、Worker 对象:

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::vector 和一个字符串,使用:

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

并在我使用的 main 中序列化 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;

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

【问题讨论】:

  • 您具体在哪一行得到异常?
  • @Sankalp : ar &amp; teams;Questionnaire 类的序列化尝试中。
  • 现在将开始阅读@n.m。 ty
  • @n.m. - 我读了你提到的部分(我承认我没有读那么远)。如果您将其设置为答案,我会将其标记为答案。非常感谢您的链接,您为我节省了数小时的乐趣

标签: c++ serialization boost boost-serialization


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2018-08-28
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多