#include <iostream>
using namespace std;
class A {
public:
typedef void (A::*RunPtr)(int);
RunPtr Run;
A()
{
Run = &A::RunOff;
}
void SetOn(bool value)
{
if (value)
Run = &A::RunOn;
else
Run = &A::RunOff;
}
void RunOn(int param)
{
//RunOn stuff here
cout << "RunOn: " << param << endl;
}
void RunOff(int param)
{
//RunOff stuff here
cout << "RunOff: " << param << endl;
}
};
int main() {
A a;
a.SetOn(true);
(a.*a.Run)(1);
a.SetOn(false);
(a.*a.Run)(2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CnB1YmxpYzoKCXR5cGVkZWYgdm9pZCAoQTo6KlJ1blB0cikoaW50KTsKCVJ1blB0ciBSdW47CgogICAgQSgpCiAgICB7CiAgICAgICAgUnVuID0gJkE6OlJ1bk9mZjsKICAgIH0KCiAgICB2b2lkIFNldE9uKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICBSdW4gPSAmQTo6UnVuT247CiAgICAgICAgZWxzZQogICAgICAgICAgICBSdW4gPSAmQTo6UnVuT2ZmOwogICAgfQoKICAgIHZvaWQgUnVuT24oaW50IHBhcmFtKQogICAgewogICAgICAgIC8vUnVuT24gc3R1ZmYgaGVyZQogICAgICAgIGNvdXQgPDwgIlJ1bk9uOiAiIDw8IHBhcmFtIDw8IGVuZGw7CiAgICB9CgogICAgdm9pZCBSdW5PZmYoaW50IHBhcmFtKQogICAgewogICAgICAgIC8vUnVuT2ZmIHN0dWZmIGhlcmUKICAgICAgICBjb3V0IDw8ICJSdW5PZmY6ICIgPDwgcGFyYW0gPDwgZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkgewoJQSBhOwoJYS5TZXRPbih0cnVlKTsKCShhLiphLlJ1bikoMSk7CglhLlNldE9uKGZhbHNlKTsKCShhLiphLlJ1bikoMik7CglyZXR1cm4gMDsKfQ==