#include <iostream>
using namespace std;
class Sprite {
};
class A {
public:
void drawSprite(Sprite) {
cout << "A::drawSprite() called" << endl;
}
};
class Scene {
Sprite s;
A a;
public:
void boucle(void (A::* f)(Sprite)) {
(a.*f)(s);
}
};
class B {
Scene defaultScene;
public:
void drawMyThings() {
typedef void (A::* f)(Sprite);
f draw = &A::drawSprite;
defaultScene.boucle(draw);
}
};
int main() {
B b;
b.drawMyThings();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU3ByaXRlIHsKfTsKCmNsYXNzIEEgewpwdWJsaWM6Cgl2b2lkIGRyYXdTcHJpdGUoU3ByaXRlKSB7CgkJY291dCA8PCAiQTo6ZHJhd1Nwcml0ZSgpIGNhbGxlZCIgPDwgZW5kbDsKCX0KfTsKCmNsYXNzIFNjZW5lIHsKCVNwcml0ZSBzOwoJQSBhOwpwdWJsaWM6Cgl2b2lkIGJvdWNsZSh2b2lkIChBOjoqIGYpKFNwcml0ZSkpIHsKCQkoYS4qZikocyk7Cgl9Cn07CgpjbGFzcyBCIHsKCVNjZW5lIGRlZmF1bHRTY2VuZTsKcHVibGljOgoJdm9pZCBkcmF3TXlUaGluZ3MoKSB7CgkgICAgdHlwZWRlZiB2b2lkIChBOjoqIGYpKFNwcml0ZSk7CgkJZiBkcmF3ID0gJkE6OmRyYXdTcHJpdGU7CgkJZGVmYXVsdFNjZW5lLmJvdWNsZShkcmF3KTsKCX0KfTsKCmludCBtYWluKCkgewoJQiBiOwoJYi5kcmF3TXlUaGluZ3MoKTsKCQoJcmV0dXJuIDA7Cn0=