C/C++中 替换switch的一种方式

61 阅读1分钟

在C/C++中,经常会用到 switch语句,一种多种情况下的条件处理。但是当switch内的case语句较多时,程序其实回显得比较繁乱,此种情况下一种方式替代switch语句。

#include <iostream>
using namespace std;

float Add(float a, float b) { return (a + b); }

float Sub(float a, float b) { return (a - b); }

float Mul(float a, float b) { return (a * b); }

float Div(float a, float b) { return (a / b); }

void test1(float a, float b, int flag, float &result) {
  switch (flag) {
  case 0:
    result = Add(a, b);
    break;
  case 1:
    result = Sub(a, b);
    break;
  case 2:
    result = Mul(a, b);
    break;
  case 3:
    result = Div(a, b);
    break;
  }
}

typedef float (*BasicOperationsFunc) (float a, float b);

BasicOperationsFunc g_BasicOperationsFunc[] = {
    &Add, 
    &Sub,
    &Mul, 
    &Div
};

void test2(float a, float b, int flag, float &result) {
  BasicOperationsFunc basicOperationFunc = g_BasicOperationsFunc[flag];
  if (!basicOperationFunc) return;
  result = basicOperationFunc(a, b);
  cout << "result is " << result << endl;
}

int main() {
  float a = 10, b = 2;
  float result1 = 0, result2 = 0;
  int flag = 1;

  test1(a, b, flag, result1);
  test2(a, b, flag, result2);

  return 0;
}

通过函数指针数组的形式,对不同case进行处理和函数调用,这种方式是一个不错的尝试