我有一個映射類,我想使用boost serialize序列化這個類。boost :: serialization僅序列化映射的鍵
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/collections_load_imp.hpp。希望有一個更簡單的路徑。
謝謝。序列化是直接的那樣,當然: 的(IT = v.begin();它= v.end();它++!) AR & *it; 但deserialzing循環尚不清楚。或者你的意思是 ar&v.size(); (it = v.begin(); it!= v.end(); it ++) ar & *it; 這樣我就可以構建一個循環加載? – jma
拳頭寫一些元素和它們一個接一個,相應解除排列 –
對,我正在密集。一旦我完成它就變得很清楚了。 – jma