2011-11-29 17 views
6

Çapraz gönderme için üzgünüz. Boost kullanıcıları posta listelerine ve bir hafta boyunca herhangi bir yanıt vermeden yayınladıktan sonra, sorunu stackoverflow'ta yayınlamaya eğilimliyim. Orijinal Mesaj hafifçe yeniden düzenlendi:Boost.serialization ile vektör (de) serileştirmenin geriye dönük uyumluluğu

Merhaba listesi,

Ben yeni sürüme Boost v1.35 geçiş ediyorum. Ancak, yeni sürüm tarafından okunabilir olmak istediğim bazı eski serileştirilmiş dizelerim var.

bazı testlerden sonra ben görünüşe (bu durumda sonradan da 1.40 ama) yeni bir sürümü doğru 1.35 oluşturulan dizeleri gelen std :: vector örneklerini serisini edemediğini tespit ettik. sorunun neymiş olabilir?

Çok teşekkürler!

Ewald

== Detaylar ==

Ben

test vektör 2 öğelerle bir yapıdır metin arşivleri ve gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9) kullanan uzun tamsayıları 1 ve 2.

ilgili lib sürümleri için

Arşiv dize:

1.35: archive: 22 serialization::archive 4 2 1 2
1.40: Artık archive: 22 serialization::archive 5 2 0 1 2

: testvector iki öğe, {2, 2} içerdiği - yerine {1, 2}

Not: lib v1.40 ile yürütme

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

Sonucu s11n ile de-s11n aynı lib sürümü mükemmel çalışır.

cevap

1

en azından bu yorum ile Boost 1.48 bir dosya boost/serialization/vector_135.hpp yok:

vector_135.hpp:

Bir böcek vardı sürümü 1.35, uyumluluk için stl vektör şablonlar için seri hale getirme boost/serialization/vector.hpp yerine onu ekleyebileceğinizi varsayalım. Dezavantajı, elbette, yeni seri hale getirilmiş vektörlerin, bu durumda da buggy formatında olacak olmasıdır.

DÜZENLEME: Dosya kullanılırsa kod Kısa çalışma öneriyor

, load() her iki biçimi serisini mümkün olacak, ama save() yeni formatta seri hale getirilmeye. Yani, tek dezavantajı çirkin gibi görünüyor.

+0

Sadece Boost 1.47 ile denedi ve sonuçta elde edilen vektör hala {2, 2}. Bu bir şekilde [bu bilet] ile uyumludur (https://svn.boost.org/trac/boost/ticket/2271). –

+0

_ Sorun şu ki, vektör_135 olduğunda bile.hpp dahildir, uygun bir yük yöntemi olmadığı için hiçbir fark yaratmaz. - Ben de bir çeşit yamaya güvenme konusunda çok istekli değilim. –

+0

Boost 1.48.0 vektör_135.h'de, 1.35'in 1.36-1.40 ile uyumlu olamayacağını açıkça belirtir. Belki de bu, belgelenmeyen 1.4.0 ile bir hatadır. –

İlgili konular