У меня есть класс с картой, и я хочу сериализовать класс с помощью boost serialize.
std::map<int, ComplicatedThing> stuff;
ComplicatedThing можно получить, просто зная int.Я хочу сериализовать это эффективно.Один из способов (ick, но работает) - создать вектор ключей и сериализовать вектор.
// illustrative, not test-compiled
std::vector<int> v;
std::copy(stuff.begin, stuff.end, std::back_inserter(v));
// or
for(std::vector<int> it = v.begin(); it != v.end(); it++)
stuff[*it] = ComplicatedThing(*it);
// ...and later, at serialize/deserialize time
template<class Archive>
void srd::leaf::serialize(Archive &ar, const unsigned int version)
{
ar & v;
}
Но это не элегантно.Используя BOOST_SERIALIZATION_SPLIT_MEMBER () и методы загрузки / сохранения, я думаю, что я смогу полностью пропустить выделение промежуточного вектора.И вот я застрял.
Возможно, мой ответ заключается в понимании boost / serialization / collection_load_imp.hpp.Надеюсь, есть более простой путь.