2008-09-17 29 views
8

Tôi có một lớp mẫu mà tôi sắp xếp thứ tự (gọi là C), mà tôi muốn chỉ định một phiên bản để tăng tuần tự hóa. Vì BOOST_CLASS_VERSION không hoạt động đối với các lớp mẫu. Tôi đã thử điều này:Tăng tuần tự hóa: chỉ định phiên bản lớp mẫu

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); 
    }; 
} 
} 

nhưng không biên dịch. Dưới VC8, một cuộc gọi tiếp theo để BOOST_CLASS_VERSION cho lỗi này:

error C2913: explicit specialization; 'boost::serialization::version' is not a specialization of a class template

cách chính xác để làm điều đó là gì?

+0

"nhưng không biên dịch". Bạn có thể cho chúng tôi một số thông tin hơn thế không ?? –

+0

Theo VC8: lỗi C2913: chuyên môn rõ ràng; 'boost :: serialization :: version' không phải là một chuyên môn của một lớp mẫu trên một cuộc gọi tiếp theo tới BOOST_CLASS_VERSION. – Jazz

+1

Có vẻ chính xác. Thông báo lỗi dường như cho thấy bạn chưa bao gồm phiên bản.hpp –

Trả lời

11
#include <boost/serialization/version.hpp> 

:-)

+12

Lỗi này cũng có thể xảy ra nếu macro BOOST_CLASS_VERSION nằm trong một không gian tên, nó cần phải là toàn cục. –

1

tôi đã có thể sử dụng đúng BOOST_CLASS_VERSION vĩ mô cho đến khi tôi đóng gói nó bên trong một không gian tên. Lỗi biên dịch được trả lại là:

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?) 

Như đã đề xuất trong chỉnh sửa trước, di chuyển BOOST_CLASS_VERSION đến phạm vi toàn cầu đã giải quyết được vấn đề. Tôi muốn giữ macro gần với cấu trúc được tham chiếu.

Các vấn đề liên quan