Bonjour,
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 */ }
};
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.
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.