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