Boostシリアル化ライブラリを使用してクラスを文字列にシリアル化しようとしていますが、クラスにはいくつかのdoubleメンバー変数が含まれています。
以下は、シリアル化に使用しているコードです。
#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クラス内のシリアル化メソッドです。
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自体を使用してdoubleをストリームにリダイレクトしたり、boostのlexical_cast関数を使用してstringstream.str()から変換したりすると、これは発生しないようです。ダブルに。boostが独自のシリアル化/逆シリアル化クラスを持っていることを発見する前に、私は実際にstringstreamおよびlexical_cast呼び出しを使用して独自のクラスを作成しましたが、問題なく機能しました。シリアル化ライブラリを放棄して、以前の状態に戻る必要がないことを本当に望んでいます。うまくいけば、いくつかの設定/特性などがあります。私は行方不明です。