我試圖創建一個鏈接列表,將跟蹤我想要使用某些函數的順序。我有大約20個函數,都在我的代碼的幾個區域執行,但是它們的執行順序是動態的,所以我在創建一個列表,在其中插入哪個函數將在特定時間執行以清除將代碼放在只有一個區域用於所有if檢查,另一個區域用於執行這些功能。這使它看起來高效且易於使用。 問題我有當我想要傳遞變量。看看在C僞代碼...鏈接列表指向函數C
void func1() { ... }
void func2() { ... }
void func3(x,y) {...}
void func4(z) {...}
void func5() {...}
// Do some If checks to determine order
addFuncToList(func3);
addFuncToList(func5);
addFuncToList(func1);
while(condition) {
x++;
y--;
execute_funcs(currentNode);
currentNode = myList->next;
}
// Do some If checks to determine order
addFuncToList(func1);
addFuncToList(func5);
addFuncToList(func2);
while(condition2) {
execute_funcs(currentNode);
currentNode = myList->next;
}
void execute_funcs(currentNode) {
if(currentNode == 1) func1();
if(currentNode == 2) func2();
if(currentNode == 3) func3();
...
}
所以我喜歡這種方法,但我不想做了一堆的全局變量的,我希望能在變量傳遞進入這些功能的大部分。大多數函數不需要傳入變量,但有些需要傳入不同的類型。任何想法?
看起來您需要傳遞所有可能被調用的函數集中的一個函數需要的變量,然後忽略那些不需要的函數中的無用函數他們。 – CrazyCasta
確保你確實需要在運行時確定函數的順序。我感覺這很容易成爲http://thedailywtf.com/Articles/Soft_Coding.aspx –
的一種情況您可以使用數組來存儲函數參數,並將其傳遞給要調用的函數。這意味着這些函數必須是相同的類型,但鑄件可能是可能的。 –