我想序列化一個類使用boost序列化庫的字符串,並在我的課程中包含幾個雙成員變量。boost序列化和雙打
下面是代碼我使用序列化:
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << mPoint;
這裏是我的Point類中的方法serialiation:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
if (version > 0)
{
ar & mLatitude;
ar & mLongitude;
}
}
當我序列化到一個字符串,升壓不似乎可以像我所期望的那樣處理雙重字符串轉換(這似乎是四捨五入的問題)。研究一下它看起來像其他人報道了相同的行爲。我也理解與將double轉換爲字符串相關的精度相關問題,以及如何導致問題。
什麼是奇怪的,我不明白,雖然這似乎並沒有發生,當我使用stringstream本身和重定向雙流到流,或者當我使用boost的lexical_cast函數從stringstream轉換。 str()返回一個double。在發現boost有它自己的序列化/反序列化類之前,我實際上使用stringstream和lexical_cast調用編寫了自己的代碼,並且它沒有問題。我真的希望我不必放棄序列化庫,回到以前的版本。希望有一些設置/特徵/等。我丟了。
明顯的和愚蠢的建議是序列化的二進制數據,而不是作爲一個字符串?也許這是解決方案?再一次,如果這很容易,你可能會做到這一點...... :)如果沒有答案和我的好奇心找出解決方案,我不會提供我的建議。 :) – NoSenseEtAl 2011-06-03 22:36:15
boost的lexical_cast具有相當複雜的邏輯來設置流的精確度 - 請參閱http://www.boost.org/doc/libs/1_46_1/boost/detail/lcast_precision.hpp – 2011-06-05 15:51:31
您可以舉一個例子做和不做正確的往返? – 2011-06-05 16:22:22