-4

我目前正在用 vs2012 编写代码,我想在 Linux 中编译。我想序列化并将进度保存到文件中,并希望在 32 位和 64 位架构以及 Windows 和 Linux 上都可以访问该保存文件。

我不想使用任何序列化库。

为了实现这一点,我希望有可以将类型转换和检索的函数,即 float、double、int32 和 int64(有符号和无符号)到固定长度和可移植原语,以便在二进制文件中存储和检索。我的理解是 bool 和 char 类型是在标准中指定的,因此已经是可移植的。

性能不是关键,但大小才是关键,因此 ASCII 在这里不是一个可行的解决方案。例如,如果平台使用的位长度大于我指定的固定长度,我不介意丢失一些精度,反之亦然。

由于我是新手,过多谈论字节序、IEEE 等会使我感到困惑和恼火。

我对一个可以开箱即用地为我进行这些转换的库特别感兴趣,但如果这是实现这一目标的唯一方法,我会考虑自己滚动。

仅供参考,我不想要序列化库,因为 boost 不适用于智能指针,谷物不适用于 VS2012,Microsoft 不适用于 Linux。如果我不得不到处乱画才能让这些东西发挥作用,我想我还不如自己做。

有任何想法吗?

编辑:因为我现在已经学习了 boost 序列化库的 c++11 兼容性,所以我很乐意接受这个解决方案。

4

2 回答 2

3

@ausairman Boost Serialization 非常适用于智能指针:

#include <boost/serialization/shared_ptr.hpp>

示例(http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#examples)显示了这一点。此外,该示例使其看起来像别名,并且默认情况下会处理循环。

既然您直截了当地提到字节顺序和其他可移植性问题让您感到困惑,我非常衷心地建议您不要自己写这个(除非它纯粹是为了学习)。

于 2013-09-18T00:00:13.740 回答
3

如果您对不依赖于平台的东西感兴趣,并且会将您的值以您希望序列化的相同格式存储在内存中,请考虑使用与 Google 的 Protobuffers 2.0 相同的作者编写的 Cap'n Proto。

我不确定是否使用了智能指针,并且您可能必须重写您的对象以由 Cap'n 原型结构而不是原始值支持,但这似乎最接近您想要的。

http://kentonv.github.io/capnproto/

于 2013-09-18T00:01:54.750 回答