#include <iostream>
struct MyBase
{
virtual void DoStuff(int, float) { std::cout << "Base" << std::endl; }
};
struct MyDerived : MyBase
{
virtual void DoStuff(int, float) { std::cout << "Derived" << std::endl; }
};
int main()
{
typedef void (MyBase::*memfun)(int, float);
memfun event(&MyBase::DoStuff);
MyBase base;
MyDerived derived;
(base.*event)(42, 3.14);
(derived.*event)(42, 3.14);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IE15QmFzZQp7CiAgICAgdmlydHVhbCB2b2lkIERvU3R1ZmYoaW50LCBmbG9hdCkgeyBzdGQ6OmNvdXQgPDwgIkJhc2UiIDw8IHN0ZDo6ZW5kbDsgfSAKfTsKCnN0cnVjdCBNeURlcml2ZWQgOiBNeUJhc2UKewogICAgIHZpcnR1YWwgdm9pZCBEb1N0dWZmKGludCwgZmxvYXQpIHsgc3RkOjpjb3V0IDw8ICJEZXJpdmVkIiA8PCBzdGQ6OmVuZGw7IH0gCn07CgppbnQgbWFpbigpCnsKICAgIHR5cGVkZWYgdm9pZCAoTXlCYXNlOjoqbWVtZnVuKShpbnQsIGZsb2F0KTsKCiAgICBtZW1mdW4gZXZlbnQoJk15QmFzZTo6RG9TdHVmZik7CgogICAgTXlCYXNlIGJhc2U7CiAgICBNeURlcml2ZWQgZGVyaXZlZDsKCiAgICAoYmFzZS4qZXZlbnQpKDQyLCAzLjE0KTsKICAgIChkZXJpdmVkLipldmVudCkoNDIsIDMuMTQpOwp9Cg==