Мне кажется, что ответ на этот вопрос очень прост, но мне действительно трудно его найти.Итак, вот так:
Предположим, у вас есть следующие классы:
class Base;
class Child : public Base;
class Displayer
{
public:
Displayer(Base* element);
Displayer(Child* element);
}
Кроме того, у меня есть Base* object
, который может указывать либо на экземпляр класса Base
, либо на экземпляркласса Child
.
Теперь я хочу создать Displayer
на основе элемента, на который указывает object
, однако я хочу выбрать правильную версию конструктора.Как у меня сейчас есть, это будет выполнено именно это (я немного размыта с моим C ++ здесь, но я думаю, что это самый ясный способ)
object->createDisplayer();
virtual void Base::createDisplayer()
{
new Displayer(this);
}
virtual void Child::createDisplayer()
{
new Displayer(this);
}
Это работает, однако, есть проблема сэто:
Base
и Child
являются частью системы приложений, в то время как Displayer
является частью системы GUI.Я хочу построить систему с графическим интерфейсом независимо от системы приложений, чтобы ее можно было легко заменить.Это означает, что Base
и Child
не должны знать о Displayer
.Однако я не знаю, как этого добиться, не сообщая классам приложения о графическом интерфейсе.
Я что-то упускаю из виду или я пытаюсь сделать что-то невозможное?
РедактироватьЯ пропустил часть проблемы в моем первоначальном вопросе.Все это происходит довольно глубоко в коде GUI, обеспечивая функциональность, уникальную для этого GUI.Это означает, что я хочу, чтобы классы Base
и Child
вообще не знали о вызове, а не просто скрывали от них, что такое вызов