首页 > 代码库 > boost::serialization(2)序列化基类
boost::serialization(2)序列化基类
在派生类中序列化一个基类
boost::serialization提供一个base_object的模板发现来
解决这个问题,我们只需要在派生类的序列化代码中使用这个方法即可。
代码如下:
完整代码如下:
假如有一个基类如下:
class student_info { public: student_info() {} virtual ~student_info() {} student_info(const std::string& sn, const std::string& snm, const std::string& sg) : name_(sn), number_(snm), grade_(sg) { } virtual void print_info() const { std::cout << name_ << " " << number_ << " " << grade_ << std::endl; } private: std::string name_; std::string number_; std::string grade_; };它的一个派生类如下:
class middle_student : public student_info { public: middle_student() {} virtual ~middle_student() {} middle_student(const std::string& sn, const std::string& snm, const std::string& sg, int age) : student_info(sn, snm, sg), age_(age) { } virtual void print_info() { student_info::print_info(); std::cout << age_ << std::endl; } private: int age_; };我们如何在序列化派生类的同时序列化基类?
boost::serialization提供一个base_object的模板发现来
解决这个问题,我们只需要在派生类的序列化代码中使用这个方法即可。
代码如下:
private: friend class boost::serialization::access; template<typename Archive> void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::base_object<student_info>(*this);//使用基类的序列化 ar & BOOST_SERIALIZATION_NVP(age_); }记住需要包含头文件 <boost/serialization/base_object.hpp>,这样就解决问题了
完整代码如下:
class student_info { public: student_info() {} virtual ~student_info() {} student_info(const std::string& sn, const std::string& snm, const std::string& sg) : name_(sn), number_(snm), grade_(sg) { } virtual void print_info() const { std::cout << name_ << " " << number_ << " " << grade_ << std::endl; } private: friend class boost::serialization::access; template<typename Archive> void serialize(Archive& ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(name_); ar & BOOST_SERIALIZATION_NVP(number_); ar & BOOST_SERIALIZATION_NVP(grade_); } private: std::string name_; std::string number_; std::string grade_; }; class middle_student : public student_info { public: middle_student() {} virtual ~middle_student() {} middle_student(const std::string& sn, const std::string& snm, const std::string& sg, int age) : student_info(sn, snm, sg), age_(age) { } virtual void print_info() { student_info::print_info(); std::cout << age_ << std::endl; } private: friend class boost::serialization::access; template<typename Archive> void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::base_object<student_info>(*this); ar & BOOST_SERIALIZATION_NVP(age_); } private: int age_; };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。