我正在使用以下设计在 2 个应用程序之间发送消息。
class InternalMessage
{
public:
InternalMessage(unsigned int messageId, unsigned int messageSize, INTERNAL_MESSAGE_TYPE messageType)
: messageId_(messageId), messageSize_(messageSize), messageType_(messageType) {}
virtual ~InternalMessage() {}
protected:
unsigned int messageId_;
unsigned int messageSize_;
INTERNAL_MESSAGE_TYPE messageType_;
};
然后还有其他几个使用继承的消息:
class KeyPressMessage : public InternalMessage
{
public:
KeyPressMessage () : InternalMessage(RADIO_KEY_PRESS_MESSAGE_ID, sizeof(KeyPressMessage ), EVENT_MESSAGE_TYPE),
key_(INVALID_KEY) {}
virtual ~KeyPressMessage () {}
}
private:
KEY key_;
};
在接收消息时,我们使用基类指针:
MsgHandler(InternalMessage* )
在发送消息时,我们使用派生类 sizeof 来计算要发送的字节数:
sizeof(KeyPressMessage )
使用这种设计似乎很糟糕,因为 sizeof 派生类包含虚拟表(可以在 32 位和 64 位操作系统之间更改)。我想问一下是否有更好的 ICD 实现消息处理程序和发送方/接收方的方法?我需要一些序列化/反序列化吗?