小编yur*_*iks的帖子

C++设计 - 网络数据包和序列化

对于我的游戏,我有一个Packet类,它代表网络数据包,基本上由一组数据和一些纯虚函数组成

然后我想要从Packet派生类,例如:StatePacket,PauseRequestPacket等.这些子类中的每一个都将实现虚拟函数Handle(),当其中一个数据包时,它将被网络引擎调用.接收到它可以完成它的工作,几个get/set函数可以读取和设置数据数组中的字段.

所以我有两个问题:

  1. (抽象)Packet类需要是可复制和可分配的,但是没有切片,保留派生类的所有字段.甚至可能派生类没有额外的字段,只有函数,它可以与基类上的数组一起使用.我怎样才能做到这一点?
  2. 在序列化时,我会给每个子类一个唯一的数字ID,然后在子类自己的序列化之前将它写入流.但是对于反序列化,我如何将读取的ID映射到适当的子类以实现它?

如果有人想要任何澄清,请问.

- 谢谢


编辑:我对此不太满意,但这就是我所管理的:

Packet.h:http
: //pastebin.com/f512e52f1 Packet.cpp:http ://pastebin.com/f5d535d19 PacketFactory.h:http
://pastebin.com/f29b7d637 PacketFactory.cpp:http://pastebin.com / f689edd9b PacketAcknowledge.h:http://pastebin.com/f50f13d6f PacketAcknowledge.cpp:http://pastebin.com/f62d34eef


如果有人有时间查看并提出任何改进建议,我会感激不尽.


是的,我知道工厂模式,但我如何编码它来构建每个类?一个巨大的转换声明?这也会重复每个类的ID(一次在工厂,一个在序列化器中),我想避免.

c++ inheritance serialization

4
推荐指数
1
解决办法
6377
查看次数

标签 统计

c++ ×1

inheritance ×1

serialization ×1