Показать сообщение отдельно
Старый 01.05.2007, 18:06     # 9
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
чего-то слишком сложно получается... Я ведь с самого начала хотел избежать выраженного вызова 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;
};
crawler вне форума