我使用升压序列化(V 1.55,我想实现序列化行为foo
是依赖于存档类型(XML或二进制)在同一。时间,我需要使用多态存档类型下面是一个简单的例子:升压系列化 - 多态存档 - 存档类型有关的行为
#include <sstream>
#include <boost/archive/polymorphic_binary_iarchive.hpp>
#include <boost/archive/polymorphic_binary_oarchive.hpp>
#include <boost/archive/polymorphic_xml_iarchive.hpp>
#include <boost/archive/polymorphic_xml_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
using namespace boost::archive;
typedef polymorphic_binary_iarchive BI;
typedef polymorphic_binary_oarchive BO;
typedef polymorphic_xml_iarchive XI;
typedef polymorphic_xml_oarchive XO;
/*
typedef binary_iarchive BI;
typedef binary_oarchive BO;
typedef xml_iarchive XI;
typedef xml_oarchive XO;
*/
struct foo
{
void save(BO & ar, unsigned int const & version) const {}
void load(BI & ar, unsigned int const & version) {}
void save(XO & ar, unsigned int const & version) const {}
void load(XI & ar, unsigned int const & version) {}
BOOST_SERIALIZATION_SPLIT_MEMBER();
};
int main()
{
std::stringstream ss;
XO ar(ss);
foo f;
ar << BOOST_SERIALIZATION_NVP(f);
}
代码编译,如果我使用非多态性存档类型,但与多态的类型,我收到以下错误
error: no matching function for call to ‘foo::save(boost::archive::polymorphic_oarchive&, const unsigned int&) const
如此看来,存档在ar <<
呼叫中键入更改。有谁知道如何实现这一点?