Повышенная сериализация предоставляет шаблонные методы сохранения для коллекций STL, например, за комплект:
template<class Archive, class Key, class Compare, class Allocator >
inline void save(
Archive & ar,
const std::set<Key, Compare, Allocator> &t,
const unsigned int /* file_version */
){
boost::serialization::stl::save_collection<
Archive, std::set<Key, Compare, Allocator>
>(ar, t);
}
, которые просто делегируют save_collection. Я предполагаю, что вы могли бы определить специализацию для своего типа коллекции, которая выполняет сериализацию по вашему выбору, например ::
namespace boost {
namespace serialization {
template<class Archive>
inline void save<MyKey, MyCompare, MyAlloc> (
Archive & ar,
const std::set<MyKey, MyCompare, MyAlloc> &t,
const unsigned int /* file_version */
){
// ...
}
}
}
В качестве отправной точки вы можете взять копию реализации save_collection (из collection_save_imp.hpp) и оптимизировать ее под свои требования. Например. используйте класс, который запоминает размер коллекции из предыдущего вызова и, если он не изменился, повторно используйте тот же буфер.
Вам также может понадобиться специализация для вашего типа участника. В этот момент сомнительно, получаете ли вы какое-либо значение от ускоренной сериализации.
Я знаю, что это немного расплывчато, но трудно быть более конкретным, не зная, какой тип коллекции вы используете, какой тип элемента и т. Д.