使用「函式指標陣列(Array of Function Pointers)」來儲存多個函式的位址,再透過陣列索引選擇要執行的函式。
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
/* 宣告函式指標陣列
funcs 是一個陣列,陣列的每個元素都是函式指標。
{ Add, Sub, Mul } 將三個函式放進陣列,依序對應索引 0、1、2。
*/
int (*funcs[])(int, int) = { Add, Sub, Mul };
int _tmain(int argc, _TCHAR* argv[])
{
//透過索引呼叫函式
cout << funcs[0](10 ,20) << endl; // 10+20
cout << funcs[1](10 ,20) << endl; // 10-20
cout << funcs[2](10 ,20) << endl; // 10*20
return 0;
}
為什麼要使用函式指標陣列?
假設你要根據使用者選擇的運算執行不同函式。
傳統方式可能寫成:
if (choice == 0)
result = Add(10, 5);
else if (choice == 1)
result = Sub(10, 5);
else if (choice == 2)
result = Mul(10, 5);
使用函式指標陣列後,可以簡化成:result = funcs[choice](10, 5);
當然,實際程式必須先確認 choice 的範圍是 0 到 2,否則可能存取陣列之外的元素。
主要優點: 當函式數量很多,而且函式具有相同的參數與回傳型別時,可以用索引選擇函式,減少大量的 if-else 或 switch。
這種技巧常用於: