1
Suggestions de nouvelles fonctionnalités / Héritage virtuel de Drawable et Transformable
« le: Juillet 14, 2012, 04:08:37 pm »
Bonjour,
Considérez les classes suivantes :
La classe Drawer permet de transformer un Drawable existant en Widget. Cela peut servir si on veut regrouper des objets dans un conteneur de Widgets.
Cependant, ce code ne compile pas :
En revanche, avec cette classe, ça marche:
Ma requête est donc la suivante:
Je voudrais que toutes les classes de la SFML qui héritent de Drawable et/ou Transformable le fasse virtuellement.
J'attends vos commentaires.
Cordialement.
Considérez les classes suivantes :
class Updatable
{
protected:
virtual void update() = 0;
};
class Widget : public virtual sf::Drawable, public virtual sf::Transformable, public virtual Updatable
{};
template <typename T>
class Drawer : public Widget, public T
{
private:
virtual void update() { /* rien a mettre a jour */ }
};
{
protected:
virtual void update() = 0;
};
class Widget : public virtual sf::Drawable, public virtual sf::Transformable, public virtual Updatable
{};
template <typename T>
class Drawer : public Widget, public T
{
private:
virtual void update() { /* rien a mettre a jour */ }
};
La classe Drawer permet de transformer un Drawable existant en Widget. Cela peut servir si on veut regrouper des objets dans un conteneur de Widgets.
Cependant, ce code ne compile pas :
Drawer<sf::Sprite> sprite;
En effet, la methode draw de Widget n'est pas définie, et Sprite n'hérite pas de Drawable virtuellement.En revanche, avec cette classe, ça marche:
class MySprite : public virtual sf::Drawable, public virtual sf::Transformable
{
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
/* dessin */
}
};
C'est grâce à l'héritage virtuel.{
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
/* dessin */
}
};
Ma requête est donc la suivante:
Je voudrais que toutes les classes de la SFML qui héritent de Drawable et/ou Transformable le fasse virtuellement.
J'attends vos commentaires.
Cordialement.