If you have a struct like this one
struct A {
void func();
};
and a reference like this one
A& a;
you can get a pointer to its func
method like this:
someMethod(&A::func);
Now what if that method is virtual and you don't know what it is at run-time? Why can't you get a pointer like this?
someMethod(&a.func);
Is it possible to get a pointer to that method?
Pointers to members take into account the virtuality of the functions they point at. For example:
#include <iostream>
struct Base
{
virtual void f() { std::cout << "Base::f()" << std::endl; }
};
struct Derived:Base
{
virtual void f() { std::cout << "Derived::f()" << std::endl; }
};
void SomeMethod(Base& object, void (Base::*ptr)())
{
(object.*ptr)();
}
int main()
{
Base b;
Derived d;
Base* p = &b;
SomeMethod(*p, &Base::f); //calls Base::f()
p = &d;
SomeMethod(*p, &Base::f); //calls Derived::f()
}
Outputs:
Base::f()
Derived::f()