有没有办法缩短长的switch()语句?

spl*_*hrt 5 c++ loops switch-statement

我在switch()语句中处理了很多情况,并且想知道是否有任何可能的方式可以缩短这些情况。它们在我的代码中占用了很多空间,并且当这些语句有3-4个大块时,很难导航。这是一个例子:

...important lines of code...

void foo(string bar, bool blam) {

     int v1 = stoi(bar);

     switch (v1) {
         case(11):
             if(blam) {
                exArr[1] = "A";
             } else {
                exArr[1] = "B";
             }
             break;

         case(12):
             if(blam) {
                 exArr[3] = "A";
             } else {
                 exArr[3] = "B";
             }
             break;

         ...many more cases...

         default:
             printElement();
             break;
}
...even more important code, which is dependent on the hard code above and hard to navigate...
Run Code Online (Sandbox Code Playgroud)

我认为您看到了问题。你们有什么建议吗?提前致谢。

重要编辑:

仅前12次迭代会更改exArr的字符。之后,它将更改为另一个(现有的)数组,例如ndArr,需要另外12次迭代。这种情况适用于4个数组,因此大约有48个case语句。

Ton*_*vel 2

假设后续情况之间的关系v1以同样的方式继续,则不需要切换:

const int v1{stoi(bar)};
if (11 <= v1 && v1 <= ...)
  exArr[1 + (v1 - 11) * 2] = blam ? "A" : "B";
else
  printElement();
Run Code Online (Sandbox Code Playgroud)

  • 虽然这不是正确的解决方案,因为 OP 显然确实需要一个 switch 语句,但这仍然是一个聪明的想法,我发现反对票是非常不值得的...... (3认同)