У меня сложная сеть объектов, связанных с 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
и boost::weak_ptr
. Это принесет пользу?