我有一个带地图的类,我想使用 boost 序列化来序列化该类。
std::map<int, ComplicatedThing> stuff;
仅通过知道 int 就可以推导出 ComplicatedThing。我想有效地序列化它。一种方法(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/collections_load_imp.hpp。希望有更简单的路径。