消息包头的设计模式

时间:2015-12-26 13:28:39

标签: c++ design-patterns messaging

我正在使用libevent编写自己的消息传递API。数据由包含packet body数据字节数组的数据包结构和包含整个数据包大小信息的packet header包装(因为在完整流中调用回调的原因)。

class PacketHeader {
  size_t packet_size;
};

class Packet {
  PacketHeader header;
  uint8_t* body;
};

但是,我希望用户能够自定义自己的PacketHeader,而我可以处理基础信息的大小信息。这样做的最佳做法是什么?我应该使用继承还是纯虚拟抽象(接口类)。我在考虑以下内容,但不确定这是否是最佳做法。

template <class Derived>
class PacketHeader{
  size_t packet_size;
  size_t header_size() const {return sizeof(Derived);}
}

1 个答案:

答案 0 :(得分:0)

为什么不让数据包自我描述,而不是所有继承的东西,比如:

struct packet_header {
  int16_t size;   // size_t is too big
  uint8_t header; // header size
  uint8_t type;   // header type, some sort of id for header/message
};

然后,用户可以使用大小定义自己的标题类型,消息将按如下方式组成:

[  ][ ][ ]<--custom header-->[--body--]

因此custom header块是可选的,并且在包头中指定了大小。然后允许用户特定代码适当地解码标头。