假設我正在創建一個國際象棋程序。我有一個功能在C函數指針中傳遞更多參數
void foreachMove(void (*action)(chess_move*), chess_game* game);
這將調用每個有效的移動函數指針操作。這一切都很好,但如果我需要將更多參數傳遞給動作函數呢?例如:
chess_move getNextMove(chess_game* game, int depth){
//for each valid move, determine how good the move is
foreachMove(moveHandler, game);
}
void moveHandler(chess_move* move){
//uh oh, now I need the variables "game" and "depth" from the above function
}
重新定義函數指針並不是最佳解決方案。 foreachMove函數是多功能的,代碼中的許多不同的地方引用它。這些引用中的每一個必須更新它們的函數以包含它們不需要的參數是沒有意義的。
如何將額外的參數傳遞給我通過指針調用的函數?