Quiero llamar a la implementación de la clase base de una función virtual utilizando un puntero de función miembro.Llamando a la definición de la clase base de la función de miembro virtual con el puntero de función
class Base {
public:
virtual void func() { cout << "base" << endl; }
};
class Derived: public Base {
public:
void func() { cout << "derived" << endl; }
void callFunc()
{
void (Base::*fp)() = &Base::func;
(this->*fp)(); // Derived::func will be called.
// In my application I store the pointer for later use,
// so I can't simply do Base::func().
}
};
En el código anterior, se llamará a la implementación de clase derivada de func desde callFunc. ¿Hay alguna manera de guardar un puntero de función miembro que apunte a Base :: func, o tendré que usar using
de alguna manera?
En mi aplicación real utilizo boost :: bind para crear un objeto boost :: function en callFunc que luego utilizaré para llamar a func desde otra parte de mi programa. Entonces, si la función boost :: bind o boost :: tiene alguna forma de evitar este problema, eso también ayudaría.
Posible duplicado de [C++: ¿Puntero a la versión monomórfica de la función de miembro virtual?] (Https://stackoverflow.com/questions/5064614/c-pointer-to-monomorphic-version-of-virtual-member-function) –