我需要为std :: shared_ptr提供Boost :: Serialization专业化。
我正在编写一个通过Boost :: Asio发送对象的程序,其中许多对象在内部使用shared_ptrs。使用变通方法仅序列化它们所指的对象是非常不舒服的。
我一直在努力创建自己的,看看为Boost :: shared_ptr提供的实现,但我不了解应该如何处理这些对象。
更改Boost :: shared_ptr序列化中的命名空间使得可以序列化指针,但反序列化对我没有用。
作为最后的手段,我可以(也许应该)切换到使用std :: unique_ptrs作为我的对象,因为目前它们似乎拥有它们,但这会导致我遇到同样的问题,与unique_ptr。
答案 0 :(得分:1)
你说你在内部使用std::shared_ptr
。那么为什么你不使用boost::shared_ptr
代替它,它boost::serialization
完全支持它,并具有std::shared_ptr
的相同功能?
答案 1 :(得分:0)
我不确定这是否是最好的方法,但似乎有效。
更改了命名空间并将此加载方法添加到从Boost :: shared_ptr特化复制的shared_ptr特化标头中:
template<class Archive, class T>
inline void load(
Archive & ar,
std::shared_ptr< T > &t,
const unsigned int /* file_version */
){
T * t_ptr;
ar >> boost::serialization::make_nvp("px", t_ptr);
t = std::shared_ptr<T>(t_ptr);
}