2011-08-22 18 views
8

He estado leyendo acerca de los punteros de función y sobre cómo usarlos como parámetros para otras funciones. Mi pregunta es ¿cómo pasarías una función por referencia sin usar punteros? He intentado encontrar la respuesta en Internet, pero no he encontrado una buena respuesta. Sé que puede pasar variables por referencia como esta: void funct(int& anInt);. ¿Cómo haría algo similar a esto, pero en lugar de una referencia a una variable, una referencia a una función era el parámetro? Además, ¿cómo usarías una referencia a la función en un cuerpo de función?C++: ¿Cómo pasar referencia-a-función a otra función?

+0

. Nota: No se puede pasar funciones. Solo puede pasar referencias o punteros a las funciones. –

Respuesta

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); 
} 

Saludos & HTH,

+1

Solo por curiosidad, ¿por qué querría usar una referencia a una función en lugar de un puntero a una función? – fredoverflow

+10

@FredOverflow: Porque un puntero puede ser nulo o no válido. Una referencia garantiza que es válida y no nula (no hay referencia nula), o que hay un error en el programa. –

+4

@Alf P. Steinbach: "o bien, que hay un error en el programa" Eso suena muy bien en teoría, pero si tiene algo como 'tipo y ref = * ptr;' la dirección en el puntero simplemente se copiará en la dirección en la referencia, que puede ser no válido o nulo. Usted podría decir que la declaración anterior es un comportamiento indefinido cuando 'ptr' no es válido o nulo, pero no habrá ninguna indicación de esto en tiempo de compilación o tiempo de ejecución, por lo que depende del programador asegurarse es válido y no nulo, lo mismo que si usaras un puntero. Entonces digo que no hay ninguna diferencia para el programador. – newacct

Cuestiones relacionadas