2008-09-17 17 views
8

Tengo una clase de plantilla que serializo (llámala C), para lo cual quiero especificar una versión para impulsar la serialización. Como BOOST_CLASS_VERSION no funciona para las clases de plantilla. Intenté esto:serialización Boost: especificando una plantilla clase versión

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); 
    }; 
} 
} 

pero no compila. Bajo VC8, una llamada posterior a BOOST_CLASS_VERSION da este error:

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

Cuál es la forma correcta de hacerlo?

+0

"pero no compila". ¿Puede darnos algo de información que eso? –

+0

En VC8: error C2913: especialización explícita; 'boost :: serialization :: version' no es una especialización de una plantilla de clase en una llamada posterior a BOOST_CLASS_VERSION. – Jazz

+1

Parece correcto. El mensaje de error parece sugerir que no ha incluido version.hpp –

Respuesta

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

:-)

+12

Este error también puede ocurrir si la macro BOOST_CLASS_VERSION está dentro de un espacio de nombres, debe ser global. –

1

que era capaz de utilizar correctamente el BOOST_CLASS_VERSION macro hasta I encapsulado dentro de un espacio de nombres. Los errores de compilación devueltos fueron:

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?) 

Como se sugiere en una edición anterior, moviéndose BOOST_CLASS_VERSION de alcance mundial resolvió el problema. Preferiría mantener la macro cerca de la estructura referenciada.

Cuestiones relacionadas