繁体   English   中英

序列化 C++ 对象

[英]Serializing C++ objects

我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。 稍后,应从文件中重建该对象。

虽然这个功能是由 C# 中的 BinaryFormatter 提供的,但我想从头开始设计我自己的序列化类。

有人可以指出一些资源吗?

提前致谢

我想给你一个否定的答案。 它不太有用,但它仍然可能有用。

我多年来一直在使用 boost 序列化,这是我公司最大的战略错误之一。 它产生非常大的输出,速度非常慢,它传播了一大堆依赖项,使所有东西的编译速度都慢得不可思议,然后很难摆脱,因为您有现有的序列化格式。 此外,它在不同的编译器上表现不同,因此从 VS2005 升级到 2010 实际上导致我们编写了一个兼容层,这也很难,因为代码很难理解。

以下是 C++ 序列化的 2 个解决方案:

我个人只有第一个的经验,实际上只使用基于文本的序列化程序,但我知道定义二进制序列化程序以与 s11n 一起使用很容易。

我已经使用 boost::serialization 库有一段时间了,我认为它非常好。 您只需要像这样创建序列化代码:

class X {
  private:
    std::string value_;
  public:
    template void serialize(Archive &ar, const unsigned int version) {
       ar & value_;
     };
 }

无需创建反序列化代码(这就是他们使用 & 运算符的原因)。 但是,如果您愿意,您仍然可以使用 << 和 >> 运算符。

也可以不加修改地为类编写序列化方法(例如:如果您需要序列化来自库的对象)。 在这种情况下,您应该执行以下操作:

namespace boost { namespace serialization {
       template
       void serialize(Archive &ar, X &x const unsigned int version) {
                    ar & x.getValue();
       };
    }}

C++ Middleware Writer可能很有趣。 与 Boost 中的序列化库相比,它具有性能优势 它还可以自动创建序列化函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM