我有一个序列化的模板类(称为C),我想为其指定一个用于Boost序列化的版本。 因为BOOST_CLASS_VERSION不适用于模板类。 我尝试了这个:
1 2 3 4 5 6 7 8 9 10 11
| 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
正确的方法是什么?
1
| #include <boost/serialization/version.hpp> |
:-)
在将宏BOOST_CLASS_VERSION封装到名称空间之前,我一直可以使用它。 返回的编译错误为:
1 2 3 4 5 6
| 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移至全局范围即可解决此问题。 我更喜欢使宏接近所引用的结构。