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

时间:2015-05-15 03:55:57

标签: c++ serialization

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

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

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

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

1 个答案:

答案 0 :(得分:0)

通常,C ++中没有本机序列化,至少根据序列化主题的wikipedia article

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

我能想到几种(非常)丑陋的方法。你可能已经想过并拒绝了这些,但为了以防万一,我将它们抛弃:

  1. 您是否可以访问该班级的所有数据成员?最糟糕的情况是,你可以将它们读成c风格的结构,应用你的编译器"打包的#34;保持事物的大小可预测,并以这种方式获得可转移的二进制blob。

  2. 您可以将指向对象的指针转换为指向uint8_t的指针,并将整个事物视为数组。如果那里有引用,指针或vtable,这将变得混乱。但是,这种方法可能适用于POD对象。

相关问题