如何拆分大switch语句

Val*_*ond 3 c++ networking

我正在制作一个在线游戏,当我从客户端接收数据时,我会收到几个“结构”(比如“我的位置”、“使用药水 23”、“攻击玩家 45”、“talk bla bla”、注销等) .),这些结构被安全读取并放入结构中,推送到列表中并(稍后,当服务器有时间时)进行处理。

问题是处理是一个大的 switch 语句(打开某种枚举-“RTTI”),我有 60 多个不同的结构,它们都是不同的。

因此,包含处理代码的 .cpp 开始变得相当大,并且随着我不断向游戏添加功能(c++ 大约在 4000-5000 行之间),它不会随时缩小。

我可以看到一个简单的解决方案,每种情况都会调用另一个文件中的函数,但这实际上会(请注意 harriyott,是的,因为我的项目和驱动器将被新文件淹没)会爆炸我需要知道的文件数量并跟踪。

我知道我可以在几个 fileN.cpp 中分割它(案例)并在处理文件中制作 '#include "file1.cpp" #include "file2.cpp" 等等,但这似乎是非常错误的。我“想出”来规避这个问题的任何其他方式似乎都太“hacky”了。

所以问题是,你如何很好地拆分一个大的 switch 语句?

Pét*_*rök 5

你可以

  • 用从枚举到处理程序函数的映射替换 switch(函数实现本身可以在同一个文件中,也可以在不同的文件中,根据您的喜好),或
  • (更面向对象的解决方案)使所有有问题的结构从声明处理程序方法的公共接口继承,使每个结构在其特定处理程序方法中实现所需的功能,然后以多态方式调用它们。

  • @Valmond,好吧,**你​​不能让复杂性消失**。如果您处理一个复杂的问题,那么解决它的程序会将复杂性编码在某个地方。你可以把它放在这儿一大堆,也可以把它在那边分成许多小堆,你可以密密麻麻,但你不能让它消失,只是改变它的形状和形式。你唯一能做的就是找到最简单、最直观的结构,它包含了你所有的复杂性。 (2认同)