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í:
- ¿Por qué no existe referencia a miembro en C ++? 1 respuesta
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.