1

我需要 std::shared_ptr 的 Boost::Serialization 专业化。

我正在编写一个通过 Boost::Asio 发送对象的程序,其中许多对象在内部使用 shared_ptrs。使用一种解决方法来仅序列化它们所指的对象是非常不舒服的。

我一直在尝试自己制作,查看为 Boost::shared_ptr 提供的实现,但我对如何处理这些对象缺乏了解。

更改 Boost::shared_ptr 序列化中的命名空间使得序列化指针成为可能,但反序列化对我不起作用。

作为最后的手段,我可​​以(也许应该)切换到对我的对象使用 std::unique_ptrs,因为目前它们似乎拥有它们,但这会导致我遇到同样的问题,只有 unique_ptr。

4

2 回答 2

1

你说你在std::shared_ptr内部使用。那么为什么不使用boost::shared_ptr它来代替它,它完全支持boost::serialization并具有相同的功能std::shared_ptr

于 2012-10-15T08:07:07.573 回答
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);
}
于 2012-10-15T09:10:53.547 回答