QSharedPointers と QWeakPointers に接続されたオブジェクトの複雑なネットワークがあります。Boost.Serialization でそれらを保存/ロードする簡単な方法はありますか? これまでのところ、私はこれを持っています:
namespace boost {
namespace serialization {
template<class Archive, class T>
void save(Archive& ar, QSharedPointer<T> const& ptr, unsigned version) {
T* sharedPointer = ptr.data();
ar & BOOST_SERIALIZATION_NVP(sharedPointer);
}
template<class Archive, class T>
void load(Archive& ar, QSharedPointer<T>& ptr, unsigned version) {
T* sharedPointer = 0;
ar & BOOST_SERIALIZATION_NVP(sharedPointer);
ptr = QSharedPointer<T>(sharedPointer);
}
template<class Archive, class T>
void save(Archive& ar, QWeakPointer<T> const& ptr, unsigned version) {
T* weakPointer = ptr.toStrongRef().data();
ar & BOOST_SERIALIZATION_NVP(weakPointer);
}
template<class Archive, class T>
void load(Archive& ar, QWeakPointer<T>& ptr, unsigned version) {
T* weakPointer = 0;
ar & BOOST_SERIALIZATION_NVP(weakPointer);
ptr = QSharedPointer<T>(weakPointer);
}
}
}
共有ポインターは常に生のポインターから構築されるため、これは機能しません。そのため、すべての共有ポインターは参照カウントが 1 であると見なします。また、弱いポインターをすぐに解放します。
いくつかの努力で、クラスを変換して使用することができますboost::shared_ptr
and boost::weak_ptr
. それは役に立ちますか?