Augmenter la sérialisation: spécifier une version de classe de modèle
-
01-07-2019 - |
Question
J'ai une classe de modèle que je sérialise (appelez-la C) et pour laquelle je souhaite spécifier une version pour la sérialisation renforcée. Comme BOOST_CLASS_VERSION ne fonctionne pas pour les classes de modèle. J'ai essayé ceci:
namespace boost {
namespace serialization {
template< typename T, typename U >
struct version< C<T,U> >
{
typedef mpl::int_<1> type;
typedef mpl::integral_c_tag tag;
BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value);
};
}
}
mais il ne compile pas. Sous VC8, un appel ultérieur à BOOST_CLASS_VERSION génère cette erreur:
erreur C2913: spécialisation explicite; 'boost :: serialization :: version' n'est pas une spécialisation d'un modèle de classe
Quelle est la bonne façon de le faire?
La solution
#include <boost/serialization/version.hpp>
: -)
Autres conseils
J'ai pu utiliser correctement la macro BOOST_CLASS_VERSION jusqu'à ce que je l'encapsule dans un espace de noms. Les erreurs de compilation renvoyées sont les suivantes:
error C2988: unrecognizable template declaration/definition
error C2143: syntax error: missing ';' before '<'
error C2913: explicit specialization; 'Romer::RDS::Settings::boost::serialization::version' is not a specialization of a class template
error C2059: syntax error: '<'
error C2143: syntax error: missing ';' before '{'
error C2447: '{': missing function header (old-style formal list?)
Comme suggéré dans une modification précédente, le transfert de BOOST_CLASS_VERSION vers une portée globale a résolu le problème. Je préférerais que la macro reste proche de la structure référencée.