Boost Serialization ライブラリが提供する形式とは異なる形式で STL コレクションが XML アーカイブに保存されるように、Boost Serialization ライブラリを拡張したいと考えています。
私が正しければ、シリアル化中にすべての STL コンテナーが次の関数を渡します。
// <boost/serialization/collections_save_imp.hpp>
namespace boost{ namespace serialization { namespace stl {
template<class Archive, class Container>
inline void save_collection(Archive & ar, const Container &s)
{
/* ... */
}
} } }
だから私は、この関数をオーバーロードしようとしましたxml_oarchive
。これが私のアプローチの小さな例です:
#include <iostream>
#include <vector>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>
namespace boost { namespace serialization { namespace stl {
template< typename Container >
inline void save_collection( boost::archive::xml_oarchive& ar, Container const& s )
{
/* My serialization */
}
} } }
int main()
{
{
boost::archive::xml_oarchive ar( std::cout );
std::vector< int > x;
x.push_back( -1 );
x.push_back( 1 );
x.push_back( 42 );
x.push_back( 0 );
ar << BOOST_SERIALIZATION_NVP( x );
}
return 0;
}
コンパイルして実行します。しかし、それは私の関数を呼び出すのではなく、Boost によって提供される関数を呼び出します。STL コンテナーのシリアル化を機能させるには、何を行う必要がありますか?