チェスのプログラムを作成しているとしましょう。私には機能があります
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 関数は用途が広く、コード内のさまざまな場所で参照されています。これらの参照のそれぞれが、必要のないパラメーターを含めるために関数を更新する必要があるのは意味がありません。
ポインターを介して呼び出している関数に追加のパラメーターを渡すにはどうすればよいですか?