[Conception] Problème de visite typée
Salut,
J'ai une famille de classes pour lequelles j'ai défini une interface commune pour recevoir un visiteur :
La classe mère a la méthode suivante:
Code:
virtual void accept(Visitor* visitor);
qui fait tout simplement :
Code:
visitor->visit(this);
La méthode visit du visiteur peut recevoir plusieurs types dans la chaine d'héritage de la classe mère c'est à dire qu'il y a :
Code:
1 2 3 4 5 6 7
| class Visitor
{
public:
void visit(ClasseMere* instance);
void visit(ClasseFille1* instance);
void visit(ClasseFille2* instance);
} |
Mon problème est le suivant :
Si je créé un visiteur et que je le donne à la méthode accept() une instance de ClasseFille1 alors le code
Code:
visitor->visit(this)
me branche sur la méthode
Code:
void visit(ClasseMere* instance);
au lieu de
Code:
void visit(ClasseFille1* instance);
Je m'attendrais en effet à ce que visit() s'adapte au type concret ClasseFille1 de mon instance.
Par contre j'ai remarqué que si je redéfini accept() dans ClasseFille1 :
Code:
virtual void accept(Visitor* visitor);
avec un code identique :
Code:
visitor->visit(this);
Alors c'est bien la méthode :
Code:
void visit(ClasseFille1* instance);
qui est appelée
Qui aurait une explication ? Quelle est la bonne façon de faire ?
Merci