1723Fermer1725
GoldenCrystalLe 24/11/2010 à 22:39
Folco (./1720) :
Question maintenant. J'ai un écrit une classe toute bête me permettant de regrouper mes objets à dessiner dans une liste par exemple, ce qui permet d'appeler dans une boucle toutes leurs fonctions de dessin, que chacun réimplémente à sa façon :class Drawable { public: Drawable (bool enabled = true); void drawEnable (); void drawDisable (); void drawToggle (); bool isDrawable (); virtual void draw () = 0; private: bool m_Enabled; };
Comme vous le voyez, une variable est prévue, permettant de désactiver l'affichage d'un objet. Je veux que sa fonction draw() voit ça et n'affiche pas son objet.
Comment faire pour éviter que chaque objet interroge sa partie Drawable pour savoir s'il doit se dessiner ? Pas que ce soit chiant à écrire (if (isDrawable()){....}), mais j'ai juste peur, dans l'implémentation d'un objet, d'oublier cette condition.

Je voudrais que ce soit transparent pour l'objet, en clair qu'il ne se dessine pas, même lorsqu'il essaye, si il a été désactivé, mais sans procéder à cette vérification lui-même.
Il y a un moyen ?

Tu as au moins deux méthodes:
Celle que je préfère: La méthode draw dessine toujours le truc quoi qu'il arrive, mais cette méthode n'est pas appelée si l'objet n'est pas visible (c'est ta boucle de dessin qui fait cette vérification, donc tu économises des appels de fonction en prime, et la vérification de visibilité ne se fait qu'à un seul endroit)
Une autre méthode que j'aime bien mais que je n'appliquerais pas ici:
Tu déclares ta méthode draw() non virtuelle, et une méthode "drawImpl()" (par exemple) virtuelle.protected: virtual void drawImpl() = 0; public: void draw() { if (isDrawable()) drawImpl(); }