#include <iostream>
using namespace std;
template<class T>
class Method
{
T* object;
void (T::*method)();
public:
Method(T* o, void (T::*m)()) : object(o), method(m) {}
void operator()() { (object->*method)(); }
};
class Foo
{
public:
void a() { cout << "a" << endl; }
void b() { cout << "b" << endl; }
};
int main() {
Foo foo;
Method<Foo> method_a(&foo, &Foo::a);
Method<Foo> method_b(&foo, &Foo::b);
method_a();
method_b();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgTWV0aG9kCnsKCVQqIG9iamVjdDsKCXZvaWQgKFQ6OiptZXRob2QpKCk7CnB1YmxpYzoKCU1ldGhvZChUKiBvLCB2b2lkIChUOjoqbSkoKSkgOiBvYmplY3QobyksIG1ldGhvZChtKSB7fQoJdm9pZCBvcGVyYXRvcigpKCkgeyAob2JqZWN0LT4qbWV0aG9kKSgpOyB9Cn07CgpjbGFzcyBGb28KewpwdWJsaWM6Cgl2b2lkIGEoKSB7IGNvdXQgPDwgImEiIDw8IGVuZGw7IH0KCXZvaWQgYigpIHsgY291dCA8PCAiYiIgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CglGb28gZm9vOwoJTWV0aG9kPEZvbz4gbWV0aG9kX2EoJmZvbywgJkZvbzo6YSk7CglNZXRob2Q8Rm9vPiBtZXRob2RfYigmZm9vLCAmRm9vOjpiKTsKCQoJbWV0aG9kX2EoKTsKCW1ldGhvZF9iKCk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==