在C++中跨进程边界发送对象的深层副本
Send deep copy of object across process boundary in C++
>我遇到一种情况,我在C++中有一个类的对象,需要使用 Linux 管道跨进程边界(进程 1 到进程 2)发送该对象。我在网上搜索了如何在C++中进行序列化。我找到了提升,但它需要在课堂上进行一些更改。在我的情况下,我无法改变班级。
此类有很多指针,嵌套继续到 3 个级别(类 1 具有类 2-> 类型的指针 1,类 2 具有类 3 -> 类 3 的指针 2,类 3 具有类 4->类 4 类型的指针 3)。有什么方法可以使用管道发送此对象,以便在第二个进程中重新创建它?
谢谢。
你需要以某种方式序列化类。您的选择究竟如何,但您可以使用JSON
或XML
或您决定的某种二进制格式等格式。如果没有看到有关您课程的更多详细信息,则没有太多要添加的内容。
另一种选择可能是使用共享内存段来存储类,但这会带来指针数学、并发性和其他复杂性的问题。
您是否考虑过 Memento 模式的应用? 您可以创建一个或多个类来处理有关如何序列化对象(文本或二进制)的详细信息。
您创建的用于保存对象的类还将知道如何从您在下一个过程中选择的序列化格式实例化新对象。
你将不得不进行某种序列化,因为你不能跨管道或类似的东西复制构造。如果无法更改类,则唯一的选择是编写一个外部函数或类,该函数或类使用顶级类的公共 API 来获取所有部分并序列化该数据。然后在另一端,你必须从流中重建它。
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 如何从构造函数副本 T(const T&)调用对象 T?
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- 将 Eigen::MatrixXd 转换为 arma::mat 并在新对象上制作副本
- C++ 在其自己的类中创建对象的修改副本
- 如何不删除基类对象的副本?
- 属于副本被推送到矢量的对象的指针会发生什么情况?
- 如何确保将对象通过许多层的组件时,不会制作副本
- C++ 如何创建链表的副本作为类对象
- 保留对象成员变量的本地副本
- 如何为同一类对象的成员函数保留单独的变量副本?
- 是 std::make_pair 在将对象添加到地图时创建副本
- 阻止用户创建班级对象的副本,但允许动态的对象有什么好处
- 替代STD ::向量存储参考而不是对象的副本
- 使用矢量push_back代码创建对象副本时遇到问题
- C++ 如何处理带有破坏状态的析构函数的对象副本
- 将对象副本添加到容器的更好方法
- 带有抽象类指针的c++对象副本
- 调用接收对象副本的函数后,原始函数将重置