在C/C++中,switch語句是經常被用到的,當switch内的case語句較多時程式有時顯得比較繁亂,此種情況下可以用另外一種實作方式替代switch。詳細用法見例子:
#include "stdafx.h"
float AddFunc(float a, float b)
{
return (a + b);
}
float SubFunc(float a, float b)
{
return (a - b);
}
float MultiplyFunc(float a, float b)
{
return (a * b);
}
float DivisionFunc(float a, float b)
{
return (a / b);
}
void Fun1(float a, float b, int flag, float &result)
{
switch (flag)
{
case 0:
result = AddFunc(a, b);
break;
case 1:
result = SubFunc(a, b);
break;
case 2:
result = MultiplyFunc(a, b);
break;
case 3:
result = DivisionFunc(a, b);
break;
}
}
//若函數無參數,且傳回值為空,則應該這樣定義:
//typedef void (*BasicOperationsFunc)();
typedef float (*BasicOperationsFunc)(float a, float b);
BasicOperationsFunc g_BasicOperationsFunc[] = {
&AddFunc,
&SubFunc,
&MultiplyFunc,
&DivisionFunc
};
void Fun2(float a, float b, int flag, float &result)
{
BasicOperationsFunc basicOperationFunc = g_BasicOperationsFunc[flag];
if (!basicOperationFunc) return;
result = basicOperationFunc(a, b);
}
int _tmain(int argc, _TCHAR* argv[])
{
float a = 10, b = 2;
float result1 = 0, result2 = 0;
int flag = 1;
Fun1(a, b, flag, result1);
Fun2(a, b, flag, result2);
return 0;
}
首先聲明一個BasicOperationsFunc,然後定義一個BasicOperationsFunc類型的數組,這樣在Fun2函數中就可以不用switch,而直接通過basicOperationFunc來調用相應的函數即可。如果在case條件比較多的情況下,這是一種不錯的替代方法。
還有其它推薦的方法嗎?