std::multimap<Participant*, Connection*>
以前我的程序在完全填充后用于序列化整个程序。这对于保存和恢复都很简单arc & _connections
。
但这需要每个连接对象都留在内存中。但我不需要这些对象来进行序列化以外的任何事情。因此,为了最大限度地减少内存消耗,它决定std::make_pair(connection->participant(), connection)
在创建它们后立即进行序列化。并在序列化完成后删除。
在填充开始之前,多图的预期大小是已知的。
我想要的是手动序列化这些对,这样我就不需要更改反序列化代码arc & _connections;
从boost/serialization/collections_save_imp.hpp
我看到
boost::serialization::save_construct_data_adl(
ar,
&(*it),
boost::serialization::version<BOOST_DEDUCED_TYPENAME Container::value_type>::value
);
ar << boost::serialization::make_nvp("item", *it++);
那么我是否需要使用类似的东西
typedef std::pair<Participant*, Connection*> PairT;
ar << BOOST_SERIALIZATION_NVP(expected_size);
if(3 < ar.get_library_version()){// I don't really understand this magic number here
const unsigned int item_version = boost::serialization::version<PairT>::value;
ar << BOOST_SERIALIZATION_NVP(item_version);
}
PairT pair = std::make_pair(connection->participant(), connection);
boost::serialization::save_construct_data_adl(
ar,
pair,
boost::serialization::version<PairT>::value
);
ar << boost::serialization::make_nvp("item", pair);
delete connection;
我不确定应该怎么做。只是猜测。