如何避免写开关盒太久?

2 c++

在我当前的项目中,有很多代码使用了包含太多案例的switch语句.

Switch(c)
{
case CASENUMBERONE:
//50-100 lines of code in each code
...
case CASENUMBERTWENTY:
..
}


//thousands of lines of macro definition in another file
#define CASENUMBERONE 1
...
#define CASENUMBERTWENTY 20
...
Run Code Online (Sandbox Code Playgroud)

编程风格似乎不合理.怎么避免这个?

Ebo*_*ike 15

要看.

  • 你可以为每个案例编写一个函数.如果您担心性能,可以内联它们,但在现实生活中,由于更好的指令高速缓存一致性,您实际上可能通过使用单独的函数来获得性能提升.

  • 如果所有可能的整数值都接近且非常密集,则可以创建跳转表.如果满足某些条件,这就是许多编译器内部为开关/外壳做的事情.跳转表是一个函数指针数组,整数是它的索引.显然,您需要进行边界检查和NULL检查.

  • 您可以重新设计代码以使用多态并调用虚函数.