2011-03-18 12 views
8

Hace un tiempo encontré que es posible escribir una función C++ que toma un parámetro de tipo de función (no tipo de puntero a función!). Por ejemplo, aquí es una función que toma una función de devolución de llamada que acepta y devuelve un doble:¿Qué significa pasar un parámetro del tipo de función en C++?

void MyFunction(double function(double)); 

Mi pregunta es lo que significa tener una variable de tipo función, ya que no se puede declarar una en cualquier otro contexto. Semánticamente, ¿cómo es diferente de un puntero de función o referencia a una función? ¿Hay alguna diferencia importante entre los punteros de función y las variables del tipo de función que debo tener en cuenta?

+0

Nunca había visto C++ así antes. –

+0

Por lo que sé, no es posible en C++. ¿Puedes dar un ejemplo si esto fue posible? –

+0

Esta es una de esas cosas como array taquigrafía 'arrData == & arrData [0]' pero no lo he visto desde que 'boost :: function' apareció en el visto y cuando las funciones lambda son totalmente compatibles que cambiarán las cosas también. – AJG85

Respuesta

13

igual void f(int x[]) es la misma que void f(int* x), los dos siguientes son idénticos:

void MyFunction(double function(double)); 
void MyFunction(double (*function)(double)); 

O, en idioma oficial (C++ 03 8.3.5/3), al determinar el tipo de una función ,

Después de determinar el tipo de cada parámetro, cualquier parámetro de tipo "array de T" o "función que devuelve T" se ajusta para ser "puntero a T" o "puntero a función que devuelve T, "respectivamente.

+0

¡Impresionante! Eso responde perfectamente mi pregunta. – templatetypedef

+0

+1 para la cotización. Eso es muy convincente! – Nawaz

+3

En raras ocasiones, el estándar ISO es claro y comprensible. –

Cuestiones relacionadas