#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
или что-то еще., пожалуйста, уточните свой вопрос