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 :

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 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
 
 
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);
Et donc j'ai les erreurs suivantes :
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