интерфейс для получения указателя производного класса из другого модуля

#c #oop

#c #ооп

Вопрос:

Я предоставил интерфейс базового класса (со всеми функциями, объявленными как виртуальные) другому модулю в моем проекте.
Теперь я могу вызывать эти функции из типа указателя базового класса, в то время как его внутренняя реализация будет выполняться другим модулем в производном классе. Мне нужно было бы получить указатель на его производный класс. Каков наилучший способ для интерфейса получить этот указатель?
Единственный способ, которым я могу думать, — это другой модуль, предоставляющий API инициализации, который возвращает указатель на производный класс.

С уважением,

Комментарии:

1. Не могли бы вы опубликовать какой-нибудь код или хотя бы скелет, чтобы прояснить вашу проблему?

Ответ №1:

Каков наилучший способ для интерфейса?..

это абстракция.. ваш лучший способ 🙂

например, вы можете использовать IoC-контейнеры для различных инъекций в ваших классах:

или просто:

 interface ICGridEventKeys
{
    virtual LRESULT onKeyHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOLamp; /*bHandled*/) = 0;
};
typedef ICGridEventKeys* ICGridEventKeys_;
 

какая-то логика:

 class CEditBox
{
public:

    CEditBox(LPCTSTR name, ICGridEventKeys_ evt):
      evt(evt)
    {
        ...
        evt->onKeyHandler(uMsg, wParam, lParam, bHandled);
        ...
    }

protected:
    ICGridEventKeys_ evt;
};
 

реализовать ICGridEventKeys:

 class Sample: public ICGridEventKeys
{
public:

    LRESULT onKeyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
    {
        //..
        return 0;
    }

    void m()
    {
        ...
        CEditBox box(_T(""), this);
    }

}
 

полный пример вы можете увидеть в моей старой оболочке — CGridItem.h

или что-то еще., пожалуйста, уточните свой вопрос