Beim Refactoring einiger Legacy-C++ - Code habe ich möglicherweise einige Code-Duplizierung durch die Definition einer Variablen, die auf jede Klassenmethode mit der gleichen Signatur verweisen könnte. Nach einem kleinen Graben, fand ich, dass ich etwas wie die folgenden tun könnte:Zeiger auf C++ - Klassenmethoden
class MyClass
{
protected:
bool CaseMethod1(int abc, const std::string& str)
{
cout << "case 1:" << str;
return true;
}
bool CaseMethod2(int abc, const std::string& str)
{
cout << "case 2:" << str;
return true;
}
bool CaseMethod3(int abc, const std::string& str)
{
cout << "case 3:" << str;
return true;
}
public:
bool TestSwitch(int num)
{
bool (MyClass::*CaseMethod)(int, const std::string&);
switch (num)
{
case 1: CaseMethod = &MyClass::CaseMethod1;
break;
case 2: CaseMethod = &MyClass::CaseMethod2;
break;
case 3: CaseMethod = &MyClass::CaseMethod3;
break;
}
...
bool res = CaseMethod(999, "hello world");
...
reurn res;
}
};
Meine Frage ist - ist dies der richtige Weg, um dies zu? Sollte ich über alles nachdenken, was Boost zu bieten hat?
Edit ...
Ok, mein Fehler - ich sollte das Verfahren wie so sein Aufruf:
bool res = ((*this).*CaseMethod)(999, "Hello World");