pointer c++ function-pointers

pointers to members in c++



¿Referencia a la función miembro? (3)

No hay referencia a la función miembro.

Esta pregunta ya tiene una respuesta aquí:

Recientemente descubrí que hay un concepto de referencia a la función en C ++ :). Entonces, como hay diferentes tipos de puntero a función y puntero a función. Surge la pregunta. ¿Existe un concepto de "función de referencia a miembro"?

Intenté compilar el siguiente código, pero GCC 3.4.6 da un error.

#include <iostream> using namespace std; class A { public: virtual void Af() const { cout << "A::Af()" << endl; } }; int main() { typedef void (A::& MemFnc)() const; MemFnc mf = &A::Af; A a; (a.*mf)(); return 0; }


No hay tal cosa llamada referencia al miembro en C ++.

La especificación del lenguaje dice explícitamente en una nota (§8.3.3 / 3 - 2003) que,

Un puntero a miembro no apuntará a un miembro estático de una clase (9.4), un miembro con tipo de referencia o "cv void". [Nota: vea también 5.3 y 5.5. El tipo "puntero a miembro" es distinto del tipo "puntero", es decir, un puntero a miembro se declara solo por el puntero a la sintaxis del declarador de miembros, y nunca por la sintaxis del puntero declarador. No hay un tipo de "referencia al miembro" en C ++.


No, las referencias a funciones miembro no son posibles.

En cierto sentido, el resultado de anular la referencia de un puntero a una función miembro podría servir como una, pero lo único que puede hacer con ese resultado es invocar un operador de llamada de función en él, según 5.5[expr.mptr.oper]/6 . Nada más está permitido.