
 Envoyé par 
Bousk
					
				 
				Ben à part du dynamic_cast tu n'auras absolument aucun moyen d'appeler une méthode de Circle sur un Node. Et vu que Rect et Circle n'ont strictement rien à voir..
			
		 
	 
 Je pense aussi, mais ma question portait plus sur le fait de savoir s'il y avait un moyen ou pas d'encapsuler ce casting dans quelque chose qui permettrait que ça se fasse automatiquement, sans avoir à le spécifier explicitement dans le code à chaque fois qu'on veut accéder à un Node.
L'idée globale était:
- de remplacer "Node* getChild(int index)" par quelque chose de la forme "NodePtrWrapper getChild(int index)"
- que cette struct NodePtrWrapper propose autant d'opérateurs de conversion implicite) de type que les sous classes disponibles (Rectangle, Cercle, ...): 
	
	1 2 3 4 5 6 7 8 9
   |  
  class NodePtrWrapper {
    public:
      NodePtrWrapper(Node* node) : nodePtr(node) {}
      operator Rectangle*() const { return(dynamic_cast<Rectangle*>(nodePtr); }
      operator Cercle*() const { return(dynamic_cast<Cercle*>(nodePtr); }
    private:
      Node* nodePtr;
} | 
 Ainsi, on aurait quelque chose du genre:
	
	Rectangle* rect = parent->getChild(27);
 ... avec:
- getChild qui retourne le NodePtrWrapper
- NodePtrWrapper qui propose une conversion implicite de lui même vers un Rectangle*
- rect qui reçoit un Rectangle*
et/ou 
	
	parent->getChild(21)->setRayon(123);
 ... avec:
- getChild qui retourne le NodePtrWrapper
- NodePtrWrapper qui propose une conversion implicite de lui-même vers un Cercle*
- setRayon(123) qui est appelé sur un Cercle*
						
					
Partager