Voglio chiamare l'implementazione della classe base di una funzione virtuale utilizzando un puntatore funzione membro.Chiamare la definizione della classe base della funzione membro virtuale con il puntatore di funzione
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().
}
};
Nel codice sopra l'implementazione della classe derivata di func sarà chiamata da callFunc. C'è un modo per salvare un puntatore a funzione membro che punta a Base :: func, o dovrò usare using
in qualche modo?
Nella mia applicazione effettiva uso boost :: bind per creare un oggetto boost :: function in callFunc che uso in seguito per chiamare func da un'altra parte del mio programma. Quindi se boost :: bind o boost :: function ha un modo per aggirare questo problema che potrebbe anche aiutare.
Possibile duplicato di [C++: puntatore a versione monomorfa della funzione membro virtuale?] (Https://stackoverflow.com/questions/5064614/c-pointer-to-monomorphic-version-of-virtual-member-function) –