我想序列化一个类使用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