我有一个项目可以执行几种不同类型的数据包序列化(Packet1
,Packet2
...)。他们都延伸了一个PacketHeader
类,并做了自己的序列化C++中的数据包序列化
这种方法看起来非常混乱和容易出错,特别是随着字段数量的增长。
是否有更清洁和更多的OOP & C++的序列化方式(没有第三方库)?
class PacketHeader {
uint8_t type;
uint32_t id;
uint32_t seqNum;
virtual void serialize(uint8_t *buf, size_t size) {
int offset = 0;
PacketHeader n;
n.type = type;
n.id = htonl(id);
n.seqNum = htonl(seqNum);
memcpy(buf + offset, &(n.type), sizeof(n.type));
offset += sizeof(n.type);
memcpy(buf + offset, &(n.id), sizeof(n.id));
offset += sizeof(n.id);
memcpy(buf + offset, &n.seqNum, sizeof(n.seqNum));
offset += sizeof(n.seqNum);
}
}
class Packet1 : public PacketHeader {
uint32_t payload;
virtual void serialize(uint8_t *buf, size_t size) {
int offset = PacketHeader::size();
PacketHeader::serialize(buf, size);
memcpy(buf + offset, &n.payload, sizeof(n.payload));
offset += sizeof(n.payload);
}
}