/ / Utilisation de boost.serialization avec les conteneurs STL en tant que paramètres de modèle - c ++, stl, boost-serialization

Utilisation de boost.serialization avec les conteneurs STL en tant que paramètres de modèle - c ++, stl, boost-serialization

Je souhaite utiliser boost.serialization avec une classe de conteneur basée sur un modèle:

// MyContainer.h

template<class T> struct MyContainer {
T t;

template<class Archive>
void serialize(Archive& archive, const unsigned version) {
archive & t;
}
};

Lorsque j'utilise un conteneur STL comme paramètre de modèle, par exemple

// Main.cpp
...
MyContainer<array<int,4>> mc;
std::ofstream ofs("foo.bar");
boost::archive::binary_oarchive oa(ofs);
oa << mc;
...

... Visual Studio 11 se plaint du message d'erreur suivant:

"serialize" : is not a member of "std::array<_Ty,_Size>"

J'ai essayé d'inclure"boost / serialization / array.hpp" dans les deux fichiers, mais cela n’a pas résolu le problème. De plus, inclure la spécialisation de tableau n’est pas ce que je veux, car le conteneur peut également contenir tout autre conteneur STL.

Quelle est la bonne façon de faire cela?

Réponses:

5 pour la réponse № 1

Tandis que serialiation / array.hpp a un serialize() surcharge pour boost::array, il n’en a pas un pour std::array.

Vous devriez pouvoir fournir votre propre serialize() surcharge en utilisant make_array() au lieu:

namespace boost {
namespace serialization {

template<class Archive, class T, size_t N>
void serialize(Archive & ar, std::array<T,N> & a, const unsigned int version)
{
ar & boost::serialization::make_array(a.data(), a.size());
}

} // namespace serialization
} // namespace boost