Salut !
j'ai impl�ment� un pattern factory, qui construit une classe � partir d'un CString (cha�ne de caract�res MFC).
Ma classe factory utilise un objet std::Map<CString> qui associe des CString avec des fonctions statiques qui ont pour r�le de faire un new sur leur propre constructeur.
Avec du code (de m�moire), �a donne :
Bon, je sais, c'est bourr� d'erreurs, mais j'ai tap� ce code de m�moire, c'est juste pour vous exposer le principe.
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
20
21
22
23
24
25
26
27
28
29
30
31 class Frame { // Classe de base de toutes les classes dans le std::map<> }; class FrameA:public Frame { static Frame* constructor() { return new FrameA(); } }; class FrameB:public Frame { static Frame* constructor() { return new FrameB(); } }; class FrameAA:public FrameA { static Frame* constructor() { return new FrameAA(); } }; // --- Quelque part, ailleurs... --- // // Remplissage de la map std::map<CString, Frame*(constructor*) > MonMap; MonMap["evChose"] = FrameA::constructor; MonMap["evBidule"] = FrameB::constructor; MonMap["evMachin"] = FrameAA::constructor; // et encore plus loin, utilisation de la map Frame* pFrame = MonMap[UneVariableDeTypeCString](); // pFrame pointe sur un FrameA, ou FrameB ou FrameAA, etc...
Avec le vrai code, �a marche bien, mais j'aimerai aller plus loin...
Mais tout d'abord, quelques questions :
- est-ce qu'il �xiste des impl�mentations compl�tes de r�f�rence des design pattern GOF en C++ ?
- est-ce que ma m�thode a de gros inconv�nients ?
Pour aller plus loin, j'aimerai rendre le CString static � la classe, pour pouvoir remplir mon map comme ceci :
et puis comme cette cl� est utilis� dans d'autres map, autant le rendre attribut static const pour chacunes des classes h�ritant de Frame.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 MonMap[FrameA::m_CStrCle] = FrameA::constructor; MonMap[FrameB::m_CStrCle] = FrameB::constructor; MonMap[FrameAA::m_CStrCle] = FrameAA::constructor;
et l�... je me dis que c'est moche, parce que �a ressemble � du code factorisable, qui n'est pas factoris�.
Pour info, dans le vrai logiciel, je n'ai pas trois classes qui h�ritent de Frame, mais 82....
Donc la question cruciale, et objet de ce long post est :
n'�xisterait-il pas un moyen de cr�er une liste de classes afin de pouvoir remplir mon Map de fa�on plus �l�gante que ce qui est pr�sent� au-dessus ?
Partager