(c++)从外部库序列化类对象

(C++) serialize object of class from external library

本文关键字:序列化 对象 从外部 c++      更新时间:2023-10-16

是否有任何方法可以序列化(或者更一般地保存到文件中)来自我无法修改的类的对象?

到目前为止,我发现的所有序列化方法都需要某种入侵方式,至少需要向类添加方法,添加友元等。

如果对象来自不是我自己编写的库中的类,我不想更改该库中的类。

更具体地说:我正在开发一个基于模块的应用程序,它也涉及模块间通信(这很简单:一个模块,源,是一些数据的所有者,另一个模块,目标,有指向该数据的指针,并且模块之间有一个简单的更新/握手协议)。我需要能够保存模块的状态(模块之间最后通信的数据)。现在,如果这种通信可以处理任何类型,包括来自外部库的类型,那将是理想的。所以我需要在保存模块状态时保存这些数据。

一般来说,c++中没有原生序列化,至少根据维基百科关于序列化主题的文章是这样的。

这里有一个很好的关于这个主题的常见问题解答资源,如果你还没有找到它,可能会很有用。不过,这只是关于序列化的一般信息;它没有解决你提出的具体问题。

我能想到几个(非常)丑陋的方法。你可能已经想到并拒绝了这些,但我把它们扔在那里,以防万一:

  1. 您是否有权访问类的所有数据成员?最坏的情况是,你可以把它们读入c风格的结构中,应用编译器的"打包"版本来保持可预测的大小,并以这种方式获得可转移的二进制blob。

  2. 你可以将指向对象的指针转换为指向uint8_t的指针,并将整个东西视为数组。如果其中有引用、指针或虚函数表,这将变得混乱。这种方法可能适用于POD对象。