我使用升壓序列化(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 <<
呼叫中鍵入更改。有誰知道如何實現這一點?