Nwlapcug.com


Come utilizzare i puntatori a funzione in C++

Un puntatore a funzione è, in sostanza, solo un puntatore a una funzione. In linguaggi come C++, ogni funzione e variabile in un computer programma esiste come un indirizzo di memoria e una variabile può contenere il valore di tale indirizzo. Tale variabile può essere passata a un callback, che può quindi chiamare la funzione che la variabile punti a. Può essere utilizzato anche in un event manager, o per l'associazione tardiva di una funzione membro. A causa della loro sintassi complicata, i puntatori a funzione sono spesso evitati dai programmatori, ma possono essere utilizzati per eseguire facilmente molte attività potente.

Istruzioni

1

Scrivere un programma C++. Questo è il programma in cui si utilizzerà un puntatore a funzione.

2

Definire un puntatore a funzione. Si può fare questo uno dei diversi modi. Dichiarare una funzione, come:

Sub doSomething(int data)
VAI

e poi dichiarare un puntatore ad esso. In alternativa, è possibile dichiarare una funzione come un puntatore:

void (*doSomething)(int)
VAI

Infine, è possibile dichiarare un typedef, quindi creare una variabile di quel tipo.

typedef void (*voidTakingInt)(int)
VAI

È ora possibile utilizzare \"voidTakingInt\" come un tipo:

Sub doSomething(int data)
VAI
voidTakingInt fun_ptr = & doSomething;

3

Dichiarare qualcosa che utilizza il puntatore a funzione. Spesso questo sarà qualcosa che utilizza il puntatore a funzione come una funzione di callback, così che quando si verifica un evento specifico, la funzione viene eseguita la funzione. Un esempio è una funzione di caricamento di file che accetta una funzione di callback per indicare il progresso.

4

Chiamare la funzione dal puntatore ad esso. Questo sarebbe fatto all'interno della funzione che hai scritto che accetta un puntatore a funzione come parametro:

void doSomething (int dati) {
}

void callAnotherFunction (void (*otherFunction)(int)) {

(* otherFunction) (3)
VAI

}

int principale (int argc, char * {argv[])

callAnotherFunction(&doSomething)
VAI
return 0
VAI

}

Consigli & Avvertenze

  • Nella programmazione orientata agli oggetti, le funzioni sono spesso membri di una certa classe. Funzioni membro non static non possono essere passate come puntatori a funzione. Una pratica comune è passare invece un puntatore a un oggetto che può quindi chiamare la funzione membro necessario. Un altro modo è quello di creare una funzione di membro statico che accetta come parametro un dati, che sarebbe stato utilizzato per passare un'istanza del tipo object. Questo potrebbe quindi chiamare la funzione membro appropriata. Per esempio:
  • Questo è stato dichiarato come statico nella specifica MyClass
  • void MyClass::callAnotherFunction (void * dati) {
  • Istanza di MyClass = (MyClass*)(data)
  • VAI
  • intance -> DoSomething)
  • VAI
  • }