#include <iostream>
#include <functional>
using namespace std;
class Test {
std::function<int(Test*)> func;
public:
int operator()() { return func(this); }
int DoIt1() {
return 1;
}
int DoIt2() {
return 2;
}
void SetIt(int i) {
if(i == 1) {
func = &Test::DoIt1;
} else {
func = &Test::DoIt2;
}
}
};
int main()
{
Test t1;
t1.SetIt(1);
std::cout << t1() << std::endl;
t1.SetIt(2);
std::cout << t1() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBUZXN0IHsKICBzdGQ6OmZ1bmN0aW9uPGludChUZXN0Kik+IGZ1bmM7CnB1YmxpYzoKICBpbnQgb3BlcmF0b3IoKSgpIHsgIHJldHVybiBmdW5jKHRoaXMpOyB9CgogIGludCBEb0l0MSgpIHsKICAgIHJldHVybiAxOwogIH0KCiAgaW50IERvSXQyKCkgewogICAgcmV0dXJuIDI7CiAgfQoKICB2b2lkIFNldEl0KGludCBpKSB7CiAgICBpZihpID09IDEpIHsKICAgICAgZnVuYyA9ICZUZXN0OjpEb0l0MTsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bmMgPSAmVGVzdDo6RG9JdDI7CiAgICB9CiAgfQp9OwoKaW50IG1haW4oKQp7CiAgVGVzdCB0MTsKCiAgdDEuU2V0SXQoMSk7CgogIHN0ZDo6Y291dCA8PCB0MSgpIDw8IHN0ZDo6ZW5kbDsKCiAgdDEuU2V0SXQoMik7CgogIHN0ZDo6Y291dCA8PCB0MSgpIDw8IHN0ZDo6ZW5kbDsKCiAgcmV0dXJuIDA7Cn0=