#include <iostream>
class MyClass
{
public:
MyClass (const bool select)
{
if (select)
{
speaker = &MyClass::foo;
}
else
{
speaker = &MyClass::bar;
}
}
void speak() const
{
(this->*speaker)();
}
void (MyClass::*speaker)() const;
private:
void foo() const { std::cout << "Foo\n"; }
void bar() const { std::cout << "Bar\n"; }
};
int main()
{
MyClass m1(true);
MyClass m2(false);
m1.speak();
m2.speak();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgTXlDbGFzcwp7CiAgIHB1YmxpYzoKCiAgICAgIE15Q2xhc3MgKGNvbnN0IGJvb2wgc2VsZWN0KQogICAgICB7CiAgICAgICAgIGlmIChzZWxlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgc3BlYWtlciA9ICZNeUNsYXNzOjpmb287CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgIHNwZWFrZXIgPSAmTXlDbGFzczo6YmFyOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZvaWQgc3BlYWsoKSBjb25zdAogICAgICB7CiAgICAgICAgICh0aGlzLT4qc3BlYWtlcikoKTsKICAgICAgfQoKICAgICAgdm9pZCAoTXlDbGFzczo6KnNwZWFrZXIpKCkgY29uc3Q7CgogICBwcml2YXRlOgogICAgICB2b2lkIGZvbygpIGNvbnN0IHsgc3RkOjpjb3V0IDw8ICJGb29cbiI7IH0KICAgICAgdm9pZCBiYXIoKSBjb25zdCB7IHN0ZDo6Y291dCA8PCAiQmFyXG4iOyB9Cn07CgppbnQgbWFpbigpCnsKICAgTXlDbGFzcyBtMSh0cnVlKTsKICAgTXlDbGFzcyBtMihmYWxzZSk7CgogICBtMS5zcGVhaygpOwogICBtMi5zcGVhaygpOwp9Cgo=