Bonjour � tous,
Voici mon probl�me en r�sum� : j'ai une classe Parser, qui est juste un interface (m�thodes virtuelles) et une classe ParserPgm par exemple qui h�rite de Parser.
Ensuite j'ai une classe ParserManager qui contient une liste de toutes les classes ParserXXX.
Le probl�me actuel que j'ai c'est que quand je rajoute un parser, je dois modifier ParserManager.cpp pour inclure ParserXXX.h et ensuite ajouter � la liste le nouveau type.
Je me suis donc dit que j'allais cr�er une macro, � appeler depuis chaque ParserXXX, pour ne pus modifier ParserManager.
Voil� une simplification de mon code :
Et enfin :
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
32
33
34
35
36
37
38
39
40 class Parser: { public: Parser() {} virtual ~Parser() {} virtual bool open(std::string fileName) const = 0; virtual bool save(std::string fileName) const = 0; }; class ParserManager: { public: static ParserManager *GetInstance() { if (_singleton == NULL) _singleton = new ParserManager(); return _singleton; } ~ParserManager() {} void add(Parser *p) { _parsers.add(p); } private: ParserManager(); static ParserManager *_singleton; List<Parser> _parsers; }; ParserManager *ParserManager::_singleton = NULL; #define PARSER_MANAGER_REGISTER(TYPE) ParserManager::GetInstance()->add(new TYPE())
Et donc j'ai les erreurs suivantes :
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 class ParserXXX: { public: ParserXXX() {} virtual ~ParserXXX() {} bool open(std::string fileName) const { // ... } bool save(std::string fileName) const { // ... } }; #include <ParserManager.h> PARSER_MANAGER_REGISTER(ParserQt);
error: expected type-specifier before 'add' ParserManager::Getinstance()->add(new TYPE())
error: expected constructor, destructor, or type conversion before 'add'
Voil�, j'esp�re que j'ai pas �t� trop long et que je me suis fais comprendre : pour r�sumer :
cr�er une macro pour ajouter dans un singleton diff�rent type type qui h�rite d'une base commune.
Merci de votre aide, cordialement
Partager