English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

Func1 (int A){....}Func2 (int A){....}Func3 (int A){....}Func4 (int A){....}Func5 (int A){....}Func6 (int A){....}.......main{char a;int b;a = "Func6"a(b); //執行 Func6}打算寫成改變a的內容就可以呼叫不同的函式類似這樣的用法有沒有可能?因為一般要寫成一個變數去呼叫不同函式只能使用switch的寫法,這樣一來若是函式的數目有500個,那不就要寫500的case?主要還是想找簡潔的寫法,一個一個的寫很費功夫。

2006-07-10 03:59:59 · 3 個解答 · 發問者 專家 5 in 電腦與網際網路 程式設計

那可以使用組合式字串囉?
例如:輸入"Func"+"1"應該會呼叫"Func1"

2006-07-10 05:54:44 · update #1

3 個解答

在Compile後 function 的字串名已經變成符號了,因此不能使用組合式字串來找到函式指標.

為了達到你的目的,必須善用函式指標的宣告及查表法. Function Pointer 可以把函式的進入點當做變數動態指定, 查表法可讓你由整數指定到對應函式指標.

廢話不多說,請看以下例子:

#include
//函式實作區
void Function0(int A){ printf ("This is function0, you try %d times\n", A);}
void Function1(int A){ printf ("This is function1, you try %d times\n", A);}
void Function2(int A){ printf ("This is function2, you try %d times\n", A);}
void Function3(int A){ printf ("This is function3, you try %d times\n", A);}

//定義一個函式指標的資料型態: MYFUNCTION
typedef void (*MYFUNCTION)(int a);

int main(int argc, char* argv[])
{
//宣告一個所有函式的陣列, 一個整數對應到一個函式
MYFUNCTION listFunction[4] = {
Function0,
Function1,
Function2,
Function3
};
char c;
int i=1;
printf("Chosse function 0 ~ 3. Press 9 to exit\n");
while( (c=getchar())!='9')
{
//把字元轉為整數,同時檢查整數必須在對應表的範圍
if(c >= '0' && c<= '3')
listFunction[c-'0'](i); //查表法:由整數選擇函式指標,並呼叫之
i++;
}

return 0;
}

2006-07-10 11:33:27 · answer #1 · answered by ? 4 · 0 0

我跟你說,不變動判斷式就可以達到你要的功能,最好的辦法是虛擬函數

2006-07-11 08:47:53 · answer #2 · answered by ? 3 · 0 0

可使用function pointer

example

void Func1 (int A){....}
void Func2 (int A){....}
void Func3 (int A){....}
...
int main()
{
void (*FFF)(int ); // funtion pointer
FFF=Func1; // 把FFF 指向Func1
FFF(b); // 呼叫Func1
}

2006-07-10 05:31:14 · answer #3 · answered by SiYu 5 · 0 0

fedest.com, questions and answers