在C ++中跨进程边界发送对象的深层副本

时间:2012-10-24 02:02:21

标签: c++ linux serialization pipe

我的情况是我有一个C ++类的对象,需要使用Linux管道跨进程边界(进程1到进程2)发送。我在网上搜索了如何在C ++中进行序列化。我发现boost,但它需要在课程中进行一些更改。在我的情况下,我无法改变课程。

这个类有很多指针,嵌套继续3级(Class 1有类2的类型的指针1> Class 2有类3的类型的指针2 - >类3有类型的指针3 4级 - > 4级)。有什么办法可以使用管道发送这个对象,以便可以在第二个进程中重新创建它?

感谢。

3 个答案:

答案 0 :(得分:2)

您需要以某种方式序列化该类。您的选择究竟如何,但您可以采用JSONXML等格式,或您决定的某种二进制格式。如果没有在课堂上看到更多详细信息,那么就无法添加其他内容。

另一种选择可能是使用Shared memory段来存储类,但这会带来指针数学,并发性和其他复杂性的问题。

答案 1 :(得分:1)

您是否考虑过Memento pattern的申请?您可以创建一个或多个类来处理如何序列化对象(文本或二进制)的详细信息。

您为保存对象而创建的类也将知道如何从您在下一个过程中选择的序列化格式中实例化新对象。

答案 2 :(得分:1)

您将不得不进行某种序列化,因为您无法通过管道或类似的东西进行复制构造。如果您无法更改类,那么您唯一的选择是编写一个外部函数或类,它使用您的顶级类的公共API来获取所有部分并序列化该数据。然后在另一端,你将不得不从流重建它。