Предположим, я создаю шахматную программу. У меня есть функцияПередача большего количества параметров в указатели функции 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 является универсальной и имеет много разных мест в ссылке на код. Для каждой из этих ссылок не имеет смысла обновлять свою функцию, чтобы включить параметры, которые им не нужны.
Как передать дополнительные параметры функции, которую я вызываю через указатель?