我们目前有一个使用大量boost序列化来存储数据的系统。我们正在寻求摆脱这种情况,转而使用谷物。
但是,我们不太可能完全迁移所有序列化对象。至少,我们必须能够反序列化旧版本的数据。
是否可以同时使用 boost 和谷物来序列化同一个对象,最好不必编写两次序列化函数?
我们的代码示例是:
class Base
{
public:
std::string m_VarA;
std::string m_VarB
template<class Archive>
void serialize(Archive & rArchive, const unsigned int nVersion)
{
rArchive & BOOST_SERIALIZATION_NVP(m_VarA);
rArchive & BOOST_SERIALIZATION_NVP(m_VarB);
}
};
class Derived : public Base
{
friend class boost::serialization::access;
public:
std::bitset<32> m_Flags;
template<class Archive>
void serialize(Archive & rArchive, const unsigned int nVersion)
{
rArchive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
rArchive & BOOST_SERIALIZATION_NVP(m_Flags);
}
};
std::ostringstream stream;
Derived var;
{
boost::archive::xml_oarchive rArchive(stream);
rArchive & boost::serialization::make_nvp("Configuration", var);
}
我认为我们没有比这更复杂的事情了。