在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进行处理和函数调用,这种方式是一个不错的尝试