2011-11-29 29 views
6

Xin lỗi vì đã đăng chéo. Sau khi đăng lên danh sách gửi thư người dùng tăng tốc và một tuần mà không có bất kỳ phản hồi nào, tôi có khuynh hướng đăng vấn đề này lên stackoverflow. Original Post, hơi tái chỉnh sửa:Khả năng tương thích ngược của vectơ (de) tuần tự hóa với Boost.serialization

Hi danh sách,

Tôi di chuyển từ Boost v1.35 lên phiên bản mới. Tuy nhiên, tôi có một số chuỗi đã được tuần tự hóa mà tôi muốn có thể đọc được bằng phiên bản mới.

Sau một số thử nghiệm, tôi thấy rằng phiên bản mới hơn (trong trường hợp này là trường hợp 1.40 nhưng sau này) không thể deserialize std :: trường hợp vectơ từ 1.35 chuỗi được tạo. Bất cứ ai có thể cung cấp cho tôi một con trỏ như những gì có thể là vấn đề ở đây?

Cảm ơn rất nhiều!

Ewald

chi tiết == ==

tôi sử dụng tài liệu lưu trữ văn bản, và phiên bản gcc 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

Các vector thử nghiệm là một cấu trúc với 2 mặt hàng , các số nguyên dài 1 và 2.

Lưu Trữ chuỗi cho các phiên bản tương ứng lib:

1,35: archive: 22 serialization::archive 4 2 1 2
1.40: archive: 22 serialization::archive 5 2 0 1 2

Bây giờ là:

// includes 
#include <boost/serialization/vector.hpp> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/archive/text_oarchive.hpp> 

std::vector<long> testvector; 
std::string val = "22 serialization::archive 4 2 1 2"; // v1.35 archive 
{ 
std::stringstream ss(std::stringstream::in | std::stringstream::out); 
ss << val << std::endl; 
boost::archive::text_iarchive ia(ss); 
ia >> BOOST_SERIALIZATION_NVP(testvector); 
} 

Kết quả khi thực hiện với v1.40 lib: testvector chứa hai yếu tố, {2, 2} - thay vì {1, 2}

Lưu ý: s11n và de-s11n với cùng một phiên bản lib hoạt động hoàn hảo.

Trả lời

1

Có một tập tin boost/serialization/vector_135.hpp ít nhất là trong Boost 1,48 với nhận xét này:

vector_135.hpp: serialization cho các mẫu vector STL để tương thích với phiên bản 1,35, trong đó có một lỗi

tôi giả sử bạn có thể bao gồm nó thay vì boost/serialization/vector.hpp. Nhược điểm, tất nhiên, là các vectơ mới được tuần tự hóa sẽ ở định dạng lỗi đó trong trường hợp đó.

EDIT:

nghiên cứu Giới thiệu tóm tắt của mã cho thấy nếu các tập tin được sử dụng, load() sẽ có thể deserialize cả hai định dạng, nhưng save() sẽ serialize trong định dạng mới. Vì vậy, nhược điểm duy nhất có vẻ là xấu xí bao gồm tên sau đó.

+0

Chỉ cần thử với Boost 1.47 và véc-tơ kết quả vẫn là {2, 2}. Điều này bằng cách nào đó phù hợp với [vé này] (https://svn.boost.org/trac/boost/ticket/2271). –

+0

_Vấn đề là, ngay cả khi vector_135.hpp được bao gồm, nó làm cho không có sự khác biệt bởi vì phương pháp tải thích hợp không được gọi là_ - Tôi cũng không phải là rất quan tâm về việc dựa vào một bản vá của một số loại. –

+0

Trong Boost 1.48.0 vector_135.h, nó nói rõ rằng 1.35 không thể tương thích với 1.36-1.40. Có lẽ đây là một lỗi với 1.4.0 mà không phải là tài liệu? –

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