Bonjour,
J'essaye d'implémenter pour la première fois le design pattern factory en C++.
J'ai donc une classe Object défini comme suit :
Et une classe Tile qui en hérite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Object { public: virtual Object* clone() = 0; };
(Pour l'instant je n'ai que celle là mais à l'avenir d'autres viendrons s'ajouter)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Tile : public Object { public: Tile(); getId(); Object* clone(); };
Enfin voici ma classe objectfactory qui est d'ailleurs un singleton :
Le problème viens que je peut écrire ce code :
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
18
19 class ObjectFactory : Singleton<ObjectFactory> { friend class Singleton<ObjectFactory>; private: ObjectFactory(); ~ObjectFactory(); public: void add(std::string const& key, Object* obj) { _mapFactory[key] = obj; } Object* construct(std::string const& key) { Object* tmp = 0; tmp = _mapFactory.at(key)->clone(); return tmp; } private: std::map<std::string, Object*> _mapFactory; };
Mais après je ne peux rien faire faire avec mon objet t. Je ne peux pas accèder aux méthodes de Tile. Je ne peux par exemple par écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ObjectFactory* obj = Singleton<ObjectFactory>::instance(); obj->add("Tile", new Tile); Object* t = obj->construct("Tile");
Comment résoudre ce problème ? Merci de votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part t->getId()
Partager