#include <iostream>
class MyClass {
public:
void memberFunction1(int param) {
std::cout << "Member function 1, parameter " << param << "\n";
}
void memberFunction2(int param) {
std::cout << "Member function 2, parameter " << param << "\n";
}
void print(bool whichOne) {
void (MyClass::*memberFunctionToCall)(int);
if (whichOne) {
memberFunctionToCall = &MyClass::memberFunction1;
}
else {
memberFunctionToCall = &MyClass::memberFunction2;
}
(this->*memberFunctionToCall)(42);
}
void printEasier(bool whichOne) {
void (*memberFunctionToCall)(int);
if (whichOne) {
memberFunctionToCall = [this] (int param) { this->memberFunction1(param); };
}
else {
memberFunctionToCall = [this] (int param) { this->memberFunction2(param); };
}
memberFunctionToCall(42);
}
};
int main()
{
MyClass myInstance;
myInstance.print(true);
myInstance.print(false);
std::cout << "\n\nNow easier\n\n";
myInstance.printEasier(true);
myInstance.printEasier(false);
return 0;
}