2008-09-17 4 views
8

У меня есть класс шаблонов, который я сериализую (назовите его C), для которого я хочу указать версию для повышения сериализации. Поскольку BOOST_CLASS_VERSION не работает для классов шаблонов. Я пробовал:Ускорение сериализации: указание класса шаблона версии

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

но не скомпилирован. Под VC8, последующий вызов BOOST_CLASS_VERSION дает эту ошибку:

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

Что такое правильный способ сделать это?

+0

«но он не компилируется». Можете ли вы дать нам некоторую информацию, чем это? – 2008-09-17 12:39:39

+0

Под VC8: ошибка C2913: явная специализация; «boost :: serialization :: version» не является специализацией шаблона класса при последующем вызове BOOST_CLASS_VERSION. – Jazz 2008-09-17 13:28:40

ответ

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

:-)

1

я был в состоянии правильно использовать BOOST_CLASS_VERSION макросъемки, пока я не инкапсулируется его внутри пространства имен. Ошибки компиляции возвращаемые были:

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

Как было предложено в предыдущем редактирования, перемещения BOOST_CLASS_VERSION в глобальном масштабе решить эту проблему. Я бы предпочел сохранить макрос близко к указанной структуре.

Смежные вопросы