2008-09-17 10 views
8

J'ai une classe de template que je sérialise (appelons-la C), pour laquelle je veux spécifier une version pour la sérialisation boost. Comme BOOST_CLASS_VERSION ne fonctionne pas pour les classes de modèles. J'ai essayé ceci:Sérialisation de Boost: spécification d'une version de classe de modèle

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 donne cette erreur:

error C2913: explicit specialization; 'boost::serialization::version' is not a specialization of a class template

Quelle est la bonne façon de le faire?

+0

"mais il ne compile pas". Peux-tu nous donner quelques informations? –

+0

Sous VC8: erreur C2913: spécialisation explicite; 'boost :: serialization :: version' n'est pas une spécialisation d'un modèle de classe lors d'un appel ultérieur à BOOST_CLASS_VERSION. – Jazz

+1

Cela semble correct. Le message d'erreur semble suggérer que vous n'avez pas inclus version.hpp –

Répondre

11
#include <boost/serialization/version.hpp> 

:-)

+12

Cette erreur peut également se produire si la macro BOOST_CLASS_VERSION se trouve dans un espace de noms, elle doit être globale. –

1

j'ai pu utiliser correctement la BOOST_CLASS_VERSION macro jusqu'à ce que je l'intérieur d'un encapsulé espace de noms. Les erreurs de compilation ont été renvoyées:

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 édition précédente, se déplaçant BOOST_CLASS_VERSION à la portée mondiale résolu la question. Je préférerais garder la macro proche de la structure référencée.

Questions connexes