Bonjour tout le monde

Je suis en train de travailler sur une application pour mes études et je bloque sur un petit truc, mais qui me fait galérer depuis plus de deux heures
Je m'en remet à vous.

Alors voilà, je vous explique :

J'ai deux classes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
class GraphicalObject
{
	// tout un tas de trucs ...
};
 
class ObjectField : public GraphicalObject
{
      public :
      // tout un tas d'autres trucs ...
      std::list<GraphicalObject*> content;      
};
Le but est de pouvoir enregistrer des éléments à afficher dans des ObjectField, ces objets pouvant eux même être des ObjectField.

Maintenant tous ces objets déclarés, je voudrais tous les enregistrer facilement auprès d'un autre objet, dans lequel j'ai déclaré ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MouseHandler
{
 
     std::list<GraphicalObject *> registered_objects;
 
     void MouseHandler::register_object(GraphicalObject* o)
     {
         registered_objects.push_back(o);
     }
 
     void MouseHandler::register_object(ObjectField* o)
     {
         std::list<GraphicalObject*>::iterator i;
         for (i=o->content.begin(); i!=o->content.end(); ++i)  register_object((*i));
     }
 
};
Le but, vous vous en doutez, est de pouvoir enregistrer facilement tout le contenu d'un ObjectField, que ce soit des simples GraphicalObject ou d'autres ObjectField, grace à la surcharge de la méthode register_object(...), et cela de manière récursive

Seulement voilà le problème ...
Je remarque qu'à l'exécution, la seule fonction register_object(...) appellée est celle prenant comme paramètre un GraphicalObject, même si je passe en paramètre un ObjectField ...

Je comprend pourquoi, puisque ObjectField hérite de GraphicalObject, mais comment faire pour que ce soit la bonne méthode qui soit appellée ?

En espérant ne pas vous avoir trop embrouillé avec mes noms de classe bizarres, merci d'avance pour votre aide