いくつかの異なるタイプ ( Packet1、Packet2...) のパケットのシリアル化を行うプロジェクトがあります。それらはすべてPacketHeaderクラスを拡張し、独自のシリアル化を行います
このアプローチは、特にフィールドの数が増えるにつれて、非常に面倒でエラーが発生しやすくなります。
シリアル化のためのよりクリーンでより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);
    }
}