Domanda

Ho una classe template che ho serializzare (chiamiamolo C), per il quale si desidera specificare una versione per aumentare la serializzazione.Come BOOST_CLASS_VERSION non funziona per classi di modelli.Ho provato in questo modo:

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

ma non compila.Sotto VC8, una successiva chiamata a BOOST_CLASS_VERSION dà questo errore:

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

Qual è il modo corretto per farlo?

È stato utile?

Soluzione

#include <boost/serialization/version.hpp>

:-)

Altri suggerimenti

Sono stato in grado di usare correttamente la macro BOOST_CLASS_VERSION fino a quando ho incapsulato all'interno di uno spazio dei nomi.Gli errori di compilazione sono stati restituiti:

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

Come suggerito in un precedente modifica, spostamento BOOST_CLASS_VERSION di portata globale, ha risolto il problema.Io preferirei mantenere la macro vicino alla struttura di riferimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top