Se ho una funzione virtuale foo()
prima definito in una classe base B
e poi override in una classe derivata D
, come posso memorizzare l'indirizzo di B::foo
in un membro puntatore a -funzione in modo tale che al momento della chiamata, la chiamata si comporti come una chiamata id idivisa (come pd->B::foo()
)?qualificato-id per funzione base tramite puntatore
Esempio:
struct B {
virtual int foo() { return 1; }
};
struct D: public B {
virtual int foo() { return 2; }
};
int main(int argc, char * argv[]) {
D* pd = new D();
int (B::*pf)() = &B::foo;
int r = (pd->*pf)();
return 0;
}
Questo avrebbe chiamato D::foo()
. Posso inizializzare pf
in modo tale che lo (pd->*pf)()
chiamerebbe B::foo()
anche se il tipo dinamico di pd
è una classe che sovrascrive lo foo()
?
(Prima che qualcuno si chiede, non voglio davvero fare questo, io sono solo curioso di sapere se è possibile.)
Hack economici: 'int (* fp) (B &) = [] (B & b) {ritorno b.B :: pippo(); }; ' –