Если у меня есть виртуальная функция foo()
, сначала определенная в базовом классе B
, а затем переопределенная в производном классе D
, как я могу сохранить адрес B::foo
в указателе на элемент- так, что при вызове он будет вести себя как вызов с квалифицированным идентификатором (например, pd->B::foo()
)?
Пример:
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;
}
Это вызовет D::foo()
. Можно ли инициализировать pf
таким образом, чтобы (pd->*pf)()
вызывал B::foo()
, даже если pd
dynamic type - класс, который переопределяет foo()
?
(Прежде чем кто-нибудь спросит, я действительно не хочу этого делать, мне просто интересно, если это возможно.)