#include <iostream>
#include <string>
using namespace std;
class myClass
{
public:
myClass(int value);
void methodA(const string &msg) { cout << msg << " from methodA" << endl; }
void methodB(const string &msg) { cout << msg << " from methodB" << endl; }
void method(const string &msg) { (this->*send_msg)(msg); }
//private:
void (myClass::*send_msg)(const string &msg);
};
myClass::myClass(int value) : send_msg(value > 0 ? &myClass::methodA : &myClass::methodB)
{
}
int main()
{
myClass a(1);
a.method("Hi");
myClass b(0);
b.method("Hi");
//or
myClass c(1);
(c.*c.send_msg)("Hi");
myClass * p = new myClass(0);
(p->*p->send_msg)("Hi");
delete p;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgbXlDbGFzcwp7CnB1YmxpYzoKICAgIG15Q2xhc3MoaW50IHZhbHVlKTsKCiAgICB2b2lkIG1ldGhvZEEoY29uc3Qgc3RyaW5nICZtc2cpIHsgY291dCA8PCBtc2cgPDwgIiBmcm9tIG1ldGhvZEEiIDw8IGVuZGw7IH0KICAgIHZvaWQgbWV0aG9kQihjb25zdCBzdHJpbmcgJm1zZykgeyBjb3V0IDw8IG1zZyA8PCAiIGZyb20gbWV0aG9kQiIgPDwgZW5kbDsgfQogICAgdm9pZCBtZXRob2QoY29uc3Qgc3RyaW5nICZtc2cpIHsgKHRoaXMtPipzZW5kX21zZykobXNnKTsgfQogICAgCi8vcHJpdmF0ZToKICAgIHZvaWQgKG15Q2xhc3M6OipzZW5kX21zZykoY29uc3Qgc3RyaW5nICZtc2cpOwp9OwoKbXlDbGFzczo6bXlDbGFzcyhpbnQgdmFsdWUpIDogc2VuZF9tc2codmFsdWUgPiAwID8gJm15Q2xhc3M6Om1ldGhvZEEgOiAmbXlDbGFzczo6bWV0aG9kQikKewoKfQoKaW50IG1haW4oKQp7CiAgICBteUNsYXNzIGEoMSk7CiAgICBhLm1ldGhvZCgiSGkiKTsKCiAgICBteUNsYXNzIGIoMCk7CiAgICBiLm1ldGhvZCgiSGkiKTsKICAgIAogICAgLy9vcgogICAgCiAgICBteUNsYXNzIGMoMSk7CiAgICAoYy4qYy5zZW5kX21zZykoIkhpIik7CgogICAgbXlDbGFzcyAqIHAgPSBuZXcgbXlDbGFzcygwKTsKICAgIChwLT4qcC0+c2VuZF9tc2cpKCJIaSIpOwogICAgZGVsZXRlIHA7CiAgICAgICAgIAoJcmV0dXJuIDA7Cn0=