чего-то слишком сложно получается... Я ведь с самого начала хотел избежать выраженного вызова
m_c1.Do() Если несколько методов у каждого класса C1, C2, то как я с ними расправлюсь?
... или я чего не понимаю ?
пока додумался использовать темплейты, но как сделать для 2 классов
одновременно - не понимаю
Код:
template <typename BaseClass>
class Caller
{
typedef int (BaseClass::*Method)(int);
public:
Caller (BaseClass *pInstance) { m_pInstance = pInstance; }
void Map ( std::string Name, Method mPtr) { m_Method[Name]= mPtr; }
int Call ( std::string Name, int param) {
if (m_Method.find(Name)!=m_Method.end())
return (m_pInstance->*(m_Method[Name]))(param);
else return 0;
}
private:
std::map<std::string,Method> m_Method;
BaseClass *m_pInstance;
};