(c++)从外部库序列化类对象
(C++) serialize object of class from external library
是否有任何方法可以序列化(或者更一般地保存到文件中)来自我无法修改的类的对象?
到目前为止,我发现的所有序列化方法都需要某种入侵方式,至少需要向类添加方法,添加友元等。
如果对象来自不是我自己编写的库中的类,我不想更改该库中的类。
更具体地说:我正在开发一个基于模块的应用程序,它也涉及模块间通信(这很简单:一个模块,源,是一些数据的所有者,另一个模块,目标,有指向该数据的指针,并且模块之间有一个简单的更新/握手协议)。我需要能够保存模块的状态(模块之间最后通信的数据)。现在,如果这种通信可以处理任何类型,包括来自外部库的类型,那将是理想的。所以我需要在保存模块状态时保存这些数据。
一般来说,c++中没有原生序列化,至少根据维基百科关于序列化主题的文章是这样的。
这里有一个很好的关于这个主题的常见问题解答资源,如果你还没有找到它,可能会很有用。不过,这只是关于序列化的一般信息;它没有解决你提出的具体问题。
我能想到几个(非常)丑陋的方法。你可能已经想到并拒绝了这些,但我把它们扔在那里,以防万一:
-
您是否有权访问类的所有数据成员?最坏的情况是,你可以把它们读入c风格的结构中,应用编译器的"打包"版本来保持可预测的大小,并以这种方式获得可转移的二进制blob。
-
你可以将指向对象的指针转换为指向uint8_t的指针,并将整个东西视为数组。如果其中有引用、指针或虚函数表,这将变得混乱。这种方法可能适用于POD对象。
相关文章:
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 从一个文件中读取多个序列化对象
- 具有GSOAP的序列化对象,以验证Web服务输出
- 促进序列化对象为json
- 使用 FlatBuffers 序列化对象的向量
- 是否可以简单地序列化C++对象
- C 用向量序列化对象会导致双重自由损坏
- 用C++序列化对象的首选方式
- 序列化C++对象
- 如何在不存在任何数据损坏风险的情况下序列化对象
- 如何使用boost::序列化将对象的矢量作为属性序列化对象
- C++:如何在不使用库的情况下序列化/反序列化对象
- 写入函数是否在 C++ 中使用 ASCII 序列化对象
- 如何从 QDataStream 中读取多个相同类型的序列化对象
- 在C++中反序列化对象
- 在Qt中序列化对象图有哪些方法
- 使用 mixins 序列化/反序列化对象
- 序列化对象时丢失名称