gpt4 book ai didi

c++ - 通过 IPC 传递非 POT [普通旧数据类型]

转载 作者:行者123 更新时间:2023-11-28 07:43:45 24 4
gpt4 key购买 nike

我正在编写一个执行 IPC 的实现。用户调用,我获取所有这些参数并将它们传递给其他进程。

我已经为这些函数编写了一个基于逻辑的自动代码生成器,其工作原理如下:

  1. 获取所有参数并将它们放入一个结构中。
  2. 添加 IPC 所需的其他信息。将此结构的大小和指针传递给 POSIX 消息队列。 来自该地址的数据,直到指定的大小,被读取并发送到其他进程。
  3. 解构结构以获取参数。
  4. 使用这些参数调用实际函数。

当我只有普通旧数据类型时,这工作得很好。但是当函数参数是非 POD 时,我的逻辑失败了,因为:

  1. 在非 POD 类型的情况下,我真的不能说出总数据的大小[消息队列需要]
  2. 一些类可能包含动态增加的实体,例如 vector 。

有人可以告诉我如何处理这种情况吗?

最佳答案

您需要决定如何进行序列化。

例如您可以定义一个表示各方之间交换的消息的类型,然后实现一个将对象序列化为消息的通用函数。当您有自定义逻辑时,您可以专门化序列化函数。

这是一些伪代码:

class Message {...} // blah blah

// default imple
template<typename T>
Message& operator <<(Message& msg, T& t) { .. write it as a POD .. }

// specialize for types which need custom logic
Message& operator <<(Message& msg, SomeCustomType& x) { .. custom serialization ..}

要反序列化,您需要对 operator >> 执行类似的操作。然后你做:

Message msg;
MyType whatever = ...
msg << whatever;
// now send msg to other side.

当然,您需要消息中的一些元数据,以便您知道如何在另一端解包(即解包到哪种类型)。

有很多示例(例如,STL 流或 MFC 如何使用 CArchive 类和可序列化类型的 Serialize 方法对其进行抽象)

关于c++ - 通过 IPC 传递非 POT [普通旧数据类型],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com