我想扩展 Boost 序列化库,使 STL 集合以不同于 Boost 序列化库提供的格式保存到 XML 档案中。
如果我是正确的,所有 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 容器序列化工作?