首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在工控机上通过非豆荚[普通旧DataTypes ]

在工控机上通过非豆荚[普通旧DataTypes ]
EN

Stack Overflow用户
提问于 2013-03-08 13:06:01
回答 1查看 413关注 0票数 0

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

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

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

当我只有普通的老数据类型时,这是非常好的。但是,当函数参数是非豆荚时,我的逻辑就会失败,因为:

  1. 在消息队列所需的非POD类型的情况下,我无法真正判断总数据的大小。
  2. 有些类可能包含像向量这样的动态增长的实体。

有人能告诉我如何应对这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 13:10:29

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

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

以下是一些伪码:

代码语言:javascript
运行
复制
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 >>做类似的操作。那你就做:

代码语言:javascript
运行
复制
Message msg;
MyType whatever = ...
msg << whatever;
// now send msg to other side.

当然,您需要消息中的一些元数据,这样您就知道如何在另一边解压(即到哪种类型)。

有很多示例(例如STL流或MFC如何在可序列化类型上使用CArchive类和Serialize方法抽象它)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15294698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档