gpt4 book ai didi

c++ - boost 序列化和 double

转载 作者:可可西里 更新时间:2023-11-01 17:58:57 31 4
gpt4 key购买 nike

我正在尝试使用 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;
}
}

当我序列化为一个字符串时,boost 似乎没有像我预期的那样处理 double 到字符串的转换(似乎存在舍入问题)。研究了一下,看起来其他人也报告了相同的行为。我还了解与将 double 型转换为字符串相关的精度相关问题,反之亦然,以及这如何导致问题。

奇怪但我不明白的是,当我使用 stringstream 本身并将 double 重定向到流时,或者当我使用 boost 的 lexical_cast 函数从 stringstream.str 转换时,这似乎并没有发生() 回一个双。在发现 boost 有自己的序列化/反序列化类之前,我实际上已经使用 stringstream 和 lexical_cast 调用编写了自己的类,并且它没有问题。我真的希望我不必放弃序列化库并回到我以前拥有的东西。希望只有一些设置/特征/等。我不见了。

最佳答案

在序列化之前,您可以尝试强制您的流使用浮点科学格式:

ss << std::scientific;

看起来 boost 库正确设置了精度,但似乎没有设置格式。或者,我可以认为您可以派生和覆盖用于保存和/或加载 float 的逻辑,而不会丢弃库的其余部分 - 开始 here .

看起来也有work in progress关于支持无穷大等

关于c++ - boost 序列化和 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6215400/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com