我有一个巨大的 switch case,里面有嵌套的 switch case 语句,我想知道是否有人对如何清理有任何想法?

switch (datatype) {
    case STR:
    {
         switch(operation)
         {
              case EQUALS:
              {
                     /* perform str compare */
              }
              case NOTEQUALS:
              {
              }
              case LT:
              {
              }
              case GT:
              {
              }
              case GTE:
              {
              }
              case LTE:
              {
              }
              default:
                 break;
         }
         break;
    }
    case VER:
    {
         switch(operation)
         {
              case EQUALS:
              {
                     /* perform version compare */
              }
              case NOTEQUALS:
              {
              }
              case LT:
              {
              }
              case GT:
              {
              }
              case GTE:
              {
              }
              case LTE:
              {
              }
              default:
                 break;
         }
         break;
    }
    case INT:
    {
         /* same */
    }
    case FLOAT:
    {
         /* same */
    }
    /* ... more types ... */
    /* ... .......... ... */
    default:
        break;
}

最佳答案

如果操作的值是连续的,您可以制作一个函数指针表。事实上,您可以使用单独的函数来制作函数指针的 2D 表来处理每个操作/类型组合。例如

// do some range checking on input params
// invoke the handler
handlers[datatype][operation]();

关于c 关于缩小此功能的想法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1544750/

10-08 22:40