Lo siento si esto se ha preguntado antes, pero no he podido encontrarlo.¿pasar función por valor (?) En lugar de puntero a la función?
Así que estoy tratando de educarme sobre las plantillas y las nuevas características de C++ 11 (principalmente lambdas, algo que siempre me ha gustado en otros idiomas).
Pero en mis pruebas me vinieron a algo que no tenía idea funcionó, y yo estoy tratando de entender cómo funciona figura, pero no puede salir ..
El siguiente código:
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
Si entiendo cómo funcionan las plantillas, básicamente son un esquema para que el compilador sepa qué construir, así que la primera llamada Test(&Callback);
esperaba trabajar porque el compilador verá que la plantilla recibe una dirección de función y asumirá que los argumentos deberían ser un puntero.
Pero, ¿cuál es la segunda llamada? ¿Cuál es la plantilla suponiendo que sea? Una copia de una función (si eso tiene sentido)
gracias por la respuesta. así que si no usé plantillas y declare Test like: void Test (void (* callback) (int)) {...} ambas llamadas también funcionarían. Es bueno saberlo. Me aseguro de leer el hilo que vinculó. – sap