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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top