【问题标题】:Is there any alternative way of writing the code instaed of using switch statement in c++是否有任何替代方法来编写代码而不是在 c++ 中使用 switch 语句
【发布时间】:2011-02-16 22:01:20
【问题描述】:

我们正在使用 C++ 构建 DLL。由于我们有 400 个案例,DLL 的大小越来越大,所以有什么替代方法可以代替 switch

【问题讨论】:

  • 能否请您提及您正在采取的操作类型以及您在 switch 中检查的值。
  • 很大程度上取决于代码的作用。
  • 你能解释更多上下文吗?你为什么这样做?你应该早点停下来寻找替代方案,比如 8 或 10 例。
  • 我有点纳闷,为什么开关的大小和DLL的大小有关。与 DLL 中的其余代码相比,此开关的作用是什么?你能解释一下吗?
  • 如果将最后四个if块中几乎相同的代码块分解为一个单独的函数,并替换疯狂的代码以清除地图,您将大大减少大小使用taxData_PA01953.clear() - 特别是如果所有 400 个函数都以类似方式编写。

标签: c++ switch-statement


【解决方案1】:

取决于您要切换的数据类型。如果它是密集的 int 范围,请使用存储函数指针的查找表。在其他情况下,使用 std::map 从切换值到函数指针。

【讨论】:

  • 无论如何,编译器都应该将密集的 int 范围转换为查找表。
  • 这只是让代码更加晦涩难懂,因为内部实现已经在这样做了。
【解决方案2】:

我会说切换不是问题。

你的分支之间有很多代码重复(我想你还有 395 多个),所以你应该能够通过抽象出公共部分来缩小你的 DLL;唯一的区别是您要检索的字段以及您使用它执行的计算。如果您发布的代码与您发布的代码相似,那么您的绝大多数代码都可以在分支之间共享。
如果您的编译器没有对字符串进行任何池化,因此您有多个查询模板实例,那也无济于事。

将您的所有条件、数据库查询和字符串连接分解为函数,然后看看它会将您带到哪里。

无论如何你都应该这样做,因为它会使维护和进一步扩展变得更加容易。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我不确定 400 个 if-else 是否更具可读性。
    • 即使使用这个我的 DLL 大小也没有减少
    【解决方案4】:

    开关盒的大小和DLL的大小应该没有直接关系。除了你的编译器提供的默认优化选项之外,唯一可以控制大小的方法是减少通用代码并正确使用 STL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多