Voici mon problème. Je crée ma propre interface graphique. Tous les Widgets sont dans un conteneur qui a des fonctions d'ajout et de suppression. Les widgets dérivent d'une classe de widget de base. Voici où je suis incertain. Je voudrais idéalement un flux comme celui-ci: l'utilisateur crée un pointeur (widget souhaité dérivant de la classe de base), le conteneur alloue et gère les ressources, l'utilisateur a un pointeur vers le widget et peut y effectuer des appels.Aide avec ceci (pointeurs et polymorphisme)
Cependant, le polymorphisme rend cette confusion. Comment pourrais-je obtenir mon conteneur pour créer le bon type de nouveau? Le problème ici est que n'importe qui peut créer un nouveau widget (comme SuperTextBoxWidget), c'est pourquoi fournir une chaîne et faire un changement ne résoudrait pas cela.
Mon autre solution de correction rapide est de rendre l'utilisateur responsable de faire le nouveau, et de fournir le pointeur vers la fonction d'ajout du conteneur. Mais cela ne me semble pas idiot, et il semble étrange que l'utilisateur fasse l'allocation initiale, mais alors le conteneur gère le reste, y compris l'effacement.
Quel serait le meilleur et le plus propre à cet égard?
Merci
juste une idée de ce que j'ai jusqu'à présent:
class AguiWidgetContainer
{
std::vector<AguiWidgetBase*> widgets;
public:
AguiWidgetContainer(void);
~AguiWidgetContainer(void);
void handleEvent(ALLEGRO_EVENT* event);
int add(AguiWidgetBase *widget);
bool remove(int widgetId);
};
Une classe Factory avec une interface pour autoriser les extensions utilisateur serait appropriée. De cette façon, l'utilisateur fournit les en-têtes et le code d'instanciation, mais dans un cadre contrôlé. La responsabilité de créer les objets resterait alors étroitement contrôlée. –