マップ付きのクラスがあり、boostserializeを使用してクラスをシリアル化したい。
std::map<int, ComplicatedThing> stuff;
ComplicatedThingは、intを知るだけで導出できます。これを効率的にシリアル化したい。1つの方法(うまくいきますが、機能します)は、キーのベクトルを作成し、そのベクトルをシリアル化することです。
// 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()とload / saveメソッドを使用すると、中間ベクトルの割り当てを完全にスキップできるはずです。そしてそこで私は立ち往生しています。
おそらく私の答えは、boost / serialization/collections_load_imp.hppを理解することにあります。うまくいけば、もっと簡単な道があります。