J'ai un réseau complexe d'objets connectés avec QSharedPointers et QWeakPointers. Existe-t-il un moyen simple de les sauvegarder/charger avec Boost.Serialization? Jusqu'à présent, j'ai ceci:Comment sérialiser des pointeurs partagés/faibles?
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);
}
}
}
Ce ne fonctionne pas parce que les pointeurs partagés sont toujours construits à partir des pointeurs premières afin qu'ils pensent tous le nombre de références est 1. Il a également libère immédiatement des pointeurs faibles. Avec un peu d'effort, je peux convertir les classes pour utiliser boost::shared_ptr
et boost::weak_ptr
. Cela fera-t-il du bien?
Je pense que la 2ème solution devrait fonctionner pour moi, merci. – stribika