Un puntatore a funzione è , in sostanza , solo un puntatore a una funzione . In linguaggi come C + + , ogni funzione e variabile in un programma per computer esiste un indirizzo di memoria , e una variabile può contenere il valore di tale indirizzo. Tale variabile può essere passato a un callback , che può quindi chiamare la funzione che i punti variabili . Può anche essere utilizzato in un gestore evento , o per l'associazione tardiva di una funzione membro . Grazie alla loro sintassi complicata , puntatori a funzione sono spesso evitati dai programmatori , ma possono essere utilizzati per realizzare facilmente molti compiti potenti . Cose che ti serviranno
compilatore C + +
Mostra più istruzioni
1
scrivere un programma C + + . Questo è il programma in cui si intende utilizzare un puntatore a funzione .
2
Definire un puntatore a funzione . Si può fare questo uno dei diversi modi . Dichiarare una funzione , come ad esempio:
vuoto doSomething ( int data);
e poi dichiarare un puntatore ad esso . In alternativa , è possibile dichiarare una funzione come un puntatore :
void ( * doSomething ) ( int);
Infine , è possibile dichiarare un typedef , quindi creare una variabile di quel tipo < br . >
typedef void ( * voidTakingInt ) ( int);
È ora possibile utilizzare " voidTakingInt " come tipo :
vuoto doSomething ( int data ) ; voidTakingInt fun_ptr = & doSomething ;
3
dichiarare qualcosa che utilizza il puntatore a funzione . Questo sarà spesso qualcosa che utilizza il puntatore funzione come funzione callback , in modo che quando si verifica un evento specifico , la funzione esegue la funzione . Un esempio è una funzione di file - caricamento che prende una funzione di callback per indicare il progresso .
4
Chiamare la funzione dal puntatore ad esso. Ciò avverrebbe all'interno della funzione che hai scritto che accetta un puntatore a funzione come parametro :
vuoto doSomething ( int data) { }
vuoto callAnotherFunction (void ( * otherFunction ) (int ) ) {
( * otherFunction ) ( 3) ;
}
int main ( int argc , char * argv [ ] ) {
callAnotherFunction ( & doSomething ) ; return 0; }