关于c ++:增强序列化:指定模板类版本

关于c ++:增强序列化:指定模板类版本

Boost serialization: specifying a template class version

我有一个序列化的模板类(称为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移至全局范围即可解决此问题。 我更喜欢使宏接近所引用的结构。


推荐阅读