Вот моя проблема.Я создаю свой собственный графический интерфейс Api.Все виджеты находятся в контейнере, в котором есть функции добавления и удаления.Виджеты происходят от базового класса виджетов.Вот где я не уверен.В идеале мне бы хотелось, чтобы такой поток был следующим: пользователь создает указатель (желаемый виджет, производный от базового класса), контейнер распределяет ресурсы и управляет ими, пользователь имеет указатель на виджет и может вызывать его.Однако полиморфизм делает это запутанным.Как я могу получить свой контейнер для создания правильного типа нового?Проблема здесь в том, что любой может создать новый виджет (например, SuperTextBoxWidget), поэтому предоставление строки и переключение не решат эту проблему.
Моя другая альтернатива быстрого исправления состоит в том, чтобы сделать пользователя ответственным за создание нового и предоставить указатель на функцию добавления контейнера.Но это не кажется мне идиотским доказательством, и кажется странным, что пользователь делает первоначальное распределение, но затем контейнер управляет всем остальным, включая стирание.
Какой самый лучший и чистый способ сделать это?
Спасибо
просто представление о том, что у меня есть:
class AguiWidgetContainer
{
std::vector<AguiWidgetBase*> widgets;
public:
AguiWidgetContainer(void);
~AguiWidgetContainer(void);
void handleEvent(ALLEGRO_EVENT* event);
int add(AguiWidgetBase *widget);
bool remove(int widgetId);
};