我正在编写一个执行IPC的实现。用户进行呼叫,我将所有这些参数传递给其他进程。
我为基于逻辑的逻辑编写了一个自动代码生成器,其工作原理如下:
当我只有普通的旧数据类型时,这完全正常。但是当函数参数是非POD时,我的逻辑失败是因为:
有人可以说明我如何处理这种情况吗?
答案 0 :(得分:1)
您需要决定如何进行序列化。
E.g。您可以定义一个表示在各方之间交换的消息的类型,然后实现将对象序列化为消息的通用函数。如果您有自定义逻辑,则需要专门化序列化功能。
这里有一些伪代码:
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
方法对可序列化类型进行抽象)