Să spunem că creez un program de șah. Am o funcție
void foreachMove( void (*action)(chess_move*), chess_game* game);
care va apela acțiunea pointerului funcției pentru fiecare mișcare valabilă. Acest lucru este bine și bine, dar dacă am nevoie să trec mai mulți parametri la funcția de acțiune? De exemplu:
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
}
Redactarea pointerului funcției nu este soluția optimă. Funcția foreachMove este versatilă și multe locuri diferite în codul de referință. Nu are sens ca fiecare dintre aceste referințe să fie nevoită să își actualizeze funcția pentru a include parametrii de care nu au nevoie.
Cum pot trece parametri suplimentari la o funcție pe care o sun printr-un pointer?