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