【发布时间】:2012-11-17 18:28:18
【问题描述】:
以前我的程序用于在完全填充后序列化整个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;
我不确定应该怎么做。只是猜测。
【问题讨论】:
标签: c++ serialization boost boost-serialization