У меня есть класс шаблона, который я сериализую (назовите его 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
Как правильно это делать?
В VC8: ошибка C2913: явная специализация; 'boost :: serialization :: version' не является специализацией шаблона класса при последующем вызове BOOST_CLASS_VERSION.
Выглядит правильно. Сообщение об ошибке предполагает, что вы не включили version.hpp.
Это была ошибка! Спасибо! Как жаль, что я не могу проголосовать за ваш комментарий, потому что он не сформулирован в ответе.





#include <boost/serialization/version.hpp>
:-)
Эта ошибка также может произойти, если макрос BOOST_CLASS_VERSION находится внутри пространства имен, он должен быть глобальным.
Я мог правильно использовать макрос 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 в глобальную область решило проблему. Я бы предпочел, чтобы макрос был близок к указанной структуре.
"но он не компилируется". Не могли бы вы дать нам некоторую информацию?