preguntas sobre la sintaxis de puntero de función incómoda, yo personalmente uso una hoja de trucos: The Function Pointers Tutorial (downloadable here, gracias a Vector para señalarlo).
La firma de una función miembro, sin embargo, es un poco diferente de la firma de una función normal, como usted experimentó.
Como probablemente sepa, una función miembro tiene un parámetro oculto, this
, cuyo tipo debe especificarse.
typedef int (Foo::*Member)(int, int);
Qué le permiten especificar que el primer elemento pasa a la función será un Foo*
(y por lo tanto su método realmente toma 3 argumentos, cuando se piensa en ella, no sólo 2.
Sin embargo, hay otra razón, por lo que obligó a especificar el tipo.
un puntero de función podría referirse a una función virtual, en el que las cosas de casos pueden llegar a ser muy complicado. por lo tanto, el tamaño de la en-memoria representación cambia dependiendo en el tipo de función. De hecho, en Visual S tudio, el tamaño de un puntero a función puede variar entre 1 y 4 veces el tamaño de un puntero normal. Esto depende de si la función es virtual, en particular.
Por lo tanto, la clase a la que se refiere la función es parte de la firma, y no hay solución alternativa.
Sólo por curiosidad, ¿por qué ¿Estás tratando de hacer esto? –
Estoy confundido, ¿el último 'typedef' no es lo que quieres? – GManNickG
Eso no me parece homogéneo. Es posible escribir una función declarada en global-scope, pero no es posible escribir un método dedef. Y sí, estoy diferenciando entre una firma y un tipo de puntero a función. – 0xbadf00d