2011-08-22 16 views
8

Ho letto sui puntatori di funzione e sul loro utilizzo come parametri per altre funzioni. La mia domanda è: come passare una funzione per riferimento senza utilizzare i puntatori? Ho cercato di trovare la risposta su Internet ma non ho trovato una buona risposta. So che è possibile passare variabili per riferimento in questo modo: void funct(int& anInt);. Come faresti qualcosa di simile a questo, ma invece di un riferimento a una variabile, il parametro era un riferimento a una funzione? Inoltre, come utilizzeresti un riferimento alla funzione in un corpo di una funzione?C++: come passare da riferimento a funzione in un'altra funzione?

+0

Nota:. Non è possibile passare funzioni. È possibile passare solo riferimenti o puntatori alle funzioni. –

risposta

22
#include <iostream> 
using namespace std; 

void doCall(void (&f)(int)) 
{ 
    f(42); 
} 

void foo(int x) 
{ 
    cout << "The answer might be " << x << "." << endl; 
} 

int main() 
{ 
    doCall(foo); 
} 

Acclamazioni & hth,

+1

Solo per curiosità, perché dovrei voler utilizzare un riferimento a una funzione anziché un puntatore a una funzione? – fredoverflow

+10

@FredOverflow: perché un puntatore può essere nullo o non valido. Un riferimento garantisce che sia valido e non nullo (non esiste un riferimento null), oppure che c'è un errore nel programma. –

+4

@Alf P. Steinbach: "oppure che c'è un errore nel programma" Suona alla grande in teoria ma se hai qualcosa come "sometype & ref = * ptr;" l'indirizzo nel puntatore verrà semplicemente copiato nell'indirizzo nel riferimento, che può essere non valido o nullo. Si potrebbe dire che l'affermazione precedente è un comportamento indefinito quando 'ptr' non è valido o nullo, ma non ci sarà alcuna indicazione di questo in fase di compilazione o di esecuzione, quindi è ancora compito del programmatore assicurarsi è valido e non nullo, come se avessi usato un puntatore. Quindi dico che non c'è alcuna differenza per il programmatore. – newacct

Problemi correlati