2008-09-17 67 views
8

我有一個模板類,我序列化(稱爲C),爲此我想指定升序序列化的版本。由於BOOST_CLASS_VERSION不適用於模板類。我試過這個:Boost序列化:指定一個模板類版本

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全球範圍內解決的問題。我寧願讓宏接近引用的結構。