Возможный дубликат:
Вызов определения базового класса виртуальной функции-члена с указателем функции
Учитывая следующую иерархию:
struct Base
{
virtual void f() = 0;
};
void Base::f()
{
cout << "Base::f\n";
}
struct Derived : Base
{
void f()
{
cout << "Derived::f\n";
}
};
Мы можем принудительно вызвать Base::f
следующим образом:
Derived d;
d.Base::f();
or:
Base * b = &d;
b->Base::f();
Никаких сюрпризов. Но возможно ли получить указатель на функцию-член, через которую можно вызвать Base::f
?
void (Base::*bf)() = &Base::f;
for_each( b, b+1, mem_fn( bf ) ); // calls Derived::f
(Для протокола: на самом деле мне это не нужно. Мне просто любопытно.)