2008-09-17 13 views
8

Mam klasę szablonu, którą serializuję (nazywam ją C), dla której chcę określić wersję do serializacji bodźców. Ponieważ BOOST_CLASS_VERSION nie działa dla klas szablonów. Próbowałem tego:Poprawianie serializacji: określanie wersji klasy szablonów

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

ale nie kompiluje się. Pod VC8, późniejsze wywołanie BOOST_CLASS_VERSION daje ten błąd:

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

Co to jest poprawny sposób to zrobić?

+0

"ale nie kompiluje się". Czy możesz dać nam trochę informacji niż to? –

+0

Pod VC8: błąd C2913: jawna specjalizacja; "boost :: serialization :: version" nie jest specjalizacją szablonu klasy przy kolejnym wywołaniu BOOST_CLASS_VERSION. – Jazz

+1

Wygląda prawidłowo. Komunikat o błędzie sugeruje, że nie zawierałeś wersji.hpp –

Odpowiedz

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

:-)

+12

Ten błąd może również wystąpić, jeśli makro BOOST_CLASS_VERSION znajduje się w obszarze nazw, musi być globalne. –

1

udało mi się poprawnie używać makro BOOST_CLASS_VERSION aż obudowane go wewnątrz przestrzeni nazw. Błędy kompilacji zwrócone były:

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

Jak sugerowano w poprzedniej edycji, przenosząc BOOST_CLASS_VERSION do zasięgu globalnym rozwiązać ten problem. Wolałbym trzymać makro blisko struktury, do której się odwołuje.

Powiązane problemy