#include <iostream>
class Image
{
public:
virtual void OnClicked() const
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
class Photo : public Image
{
public:
virtual void OnClicked() const
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
typedef void (Image::*Fn)() const;
int main()
{
Image *pObj = new Image;
Fn pfn = &Image::OnClicked;
(pObj->*pfn)();
Photo photo;
(photo.*pfn)();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgSW1hZ2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgT25DbGlja2VkKCkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAnXG4nOwogICAgfQp9OwoKY2xhc3MgUGhvdG8gOiBwdWJsaWMgSW1hZ2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgT25DbGlja2VkKCkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAnXG4nOwogICAgfQp9OwoKdHlwZWRlZiB2b2lkIChJbWFnZTo6KkZuKSgpIGNvbnN0OwoKCmludCBtYWluKCkKewogICAgSW1hZ2UgKnBPYmogPSBuZXcgSW1hZ2U7CiAgICBGbiBwZm4gPSAmSW1hZ2U6Ok9uQ2xpY2tlZDsKICAgIChwT2JqLT4qcGZuKSgpOwogICAgCiAgICBQaG90byBwaG90bzsKICAgIChwaG90by4qcGZuKSgpOwogICAgcmV0dXJuIDA7ICAgIAp9