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