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?
risposta
#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,
Solo per curiosità, perché dovrei voler utilizzare un riferimento a una funzione anziché un puntatore a una funzione? – fredoverflow
@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. –
@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
- 1. Come passare un puntatore a una funzione c in Cython?
- 2. Come passare argomenti da: comando a funzione?
- 3. Come passare il riferimento a "questo" sulla funzione href javascript?
- 4. Passare int tramite riferimento da C++/CLI a C#
- 5. C++: è normale passare il riferimento matrice alla funzione
- 6. in linea Argomenti funzione Passare
- 7. Come passare un array bidimensionale a una funzione in C++
- 8. Come passare una stringa a una funzione in Objective-C
- 9. Come posso passare un evento a una funzione in C#?
- 10. puntatore a funzione vs riferimento Funzione
- 11. Riferimento alla funzione Lua in C/C++
- 12. Come faccio a passare un const char * a una funzione C da C#?
- 13. Passare l'oggetto C++ alla funzione Lua
- 14. Passare FILE * in funzione da Python/ctypes
- 15. Come passare array al template di funzione con riferimento
- 16. Chiama C++ puntatore a funzione da C#
- 17. Passare gli array alla funzione in C++
- 18. passaggio di vettori a una funzione, valore vs riferimento C++
- 19. Come passare una funzione a una funzione? i funtori/oggetti funzione sono disponibili in VB2010?
- 20. Riferimento all'elemento di vettore restituito da una funzione in C++
- 21. come passare argomenti in funzione all'interno di una funzione in
- 22. Java vs C++ passare riferimento
- 23. Come posso passare un hash a una funzione in Perl?
- 24. Passare Eval da ASPX a funzione Javascript come parametro
- 25. rilevamento riferimento in matrice da un'altra funzione
- 26. Come passare un array a una funzione bash
- 27. Come passare ENUM come argomento di funzione in C
- 28. passare l'oggetto C++ alla funzione python da boost :: python
- 29. Passare in una funzione (per riferimento) una variabile nello scope
- 30. restituisce {0} da una funzione in C?
Nota:. Non è possibile passare funzioni. È possibile passare solo riferimenti o puntatori alle funzioni. –