#include <iostream>
struct Base
{
};
struct Fuu : public Base
{
void bar(){ std::cout << "Fuu::bar" << std::endl; }
void bax(){ std::cout << "Fuu::bax" << std::endl; }
};
struct Foo : public Base
{
void bar(){ std::cout << "Foo::bar" << std::endl; }
void bax(){ std::cout << "Foo::bax" << std::endl; }
};
typedef void (Base::*PtrToMethod)();
int main()
{
PtrToMethod ptr1 = (PtrToMethod) &Foo::bax;
PtrToMethod ptr2 = (PtrToMethod) &Fuu::bax;
Base *f1 = new Foo;
Base *f2 = new Fuu;
(f1->*ptr1)();
(f2->*ptr2)();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJhc2UKewp9OwoKc3RydWN0IEZ1dSA6IHB1YmxpYyBCYXNlCnsKCXZvaWQgYmFyKCl7IHN0ZDo6Y291dCA8PCAiRnV1OjpiYXIiIDw8IHN0ZDo6ZW5kbDsgfQoJdm9pZCBiYXgoKXsgc3RkOjpjb3V0IDw8ICJGdXU6OmJheCIgPDwgc3RkOjplbmRsOyB9Cn07CgpzdHJ1Y3QgRm9vIDogcHVibGljIEJhc2UKewoJdm9pZCBiYXIoKXsgc3RkOjpjb3V0IDw8ICJGb286OmJhciIgPDwgc3RkOjplbmRsOyB9Cgl2b2lkIGJheCgpeyBzdGQ6OmNvdXQgPDwgIkZvbzo6YmF4IiA8PCBzdGQ6OmVuZGw7IH0KfTsKCnR5cGVkZWYgdm9pZCAoQmFzZTo6KlB0clRvTWV0aG9kKSgpOwoKaW50IG1haW4oKQp7CglQdHJUb01ldGhvZCBwdHIxID0gKFB0clRvTWV0aG9kKSAmRm9vOjpiYXg7CglQdHJUb01ldGhvZCBwdHIyID0gKFB0clRvTWV0aG9kKSAmRnV1OjpiYXg7CgkKCQoJQmFzZSAqZjEgPSBuZXcgRm9vOwoJQmFzZSAqZjIgPSBuZXcgRnV1OwoJCgkoZjEtPipwdHIxKSgpOwoJKGYyLT4qcHRyMikoKTsKfQo=