在前篇
boost::serialization 用基类指针转存派生类(错误多多,一波三折)文中我们都是使用serialize函数来实现序列化,其代码格式如下:
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_VP(number_);
ar & BOOST_SERIALIZATION_NVP(grade_);
}
其实这个函数相当于两个函数:但我们使用xxx_oarchive时它等价于把对象数据save到文档中,
当我们使用xxx_iachive时它等价于把数据从文档中load给对象数据。因此可以它拆分成两个函数
save 和 load 函数。还用前面的例子。
save函数:
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_VP(number_);
ar & BOOST_SERIALIZATION_NVP(grade_);
}
template<typename Archive>
void save(Archive& ar, const unsigned int version) const
{
ar << BOOST_SERIALIZATION_NVP(name_);
ar << BOOST_SERIALIZATION_NVP(number_);
ar << BOOST_SERIALIZATION_NVP(grade_);
}
load函数:
template<typename Archive>
void save(Archive& ar, const unsigned int version) const
{
ar << BOOST_SERIALIZATION_NVP(name_);
ar << BOOST_SERIALIZATION_NVP(number_);
ar << BOOST_SERIALIZATION_NVP(grade_);
}