提升序列化:指定模板类版本

时间:2008-09-17 12:26:31

标签: c++ boost-serialization

我有一个我序列化的模板类(称之为C),我想为其指定一个用于boost序列化的版本。由于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

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:12)

#include <boost/serialization/version.hpp>

: - )

答案 1 :(得分: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移动到全局范围解决了这个问题。我希望保持宏接近引用的结构。