Bonjour a tous, j'ai un petit probleme avec ma conception des exceptions.
J'ai une classe CException avec un constructeur paramétré :
J'ai ensuite une hiérarchie de classe dérivée de CException en fonction de l'exception relevée :
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 class CException : public std::exception { public : CException () throw() {}; CException (const std::string &msg) throw() { m_what = msg; }; virtual const char *what (void) const throw() { return m_what.c_str(); }; protected : std::string m_what; };
Le probleme est que si je veux lever une exception CExceptionFileOpen par exemple avec comme parametre le nom du fichier :
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 CExceptionMemory : public CException { }; class CExceptionMemoryAllocFailed : public CExceptionMemory { }; class CExceptionFile : public CException { }; class CExceptionFileOpen : public CExceptionFile { }; ...
Le compilateur me dit que CExceptionFileOpen n'a pas de constructeur avec un const std::string &, pourtant la classe de base (CException) contient ce type de constructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 throw CExceptionFileOpen(filename);
Je peux corriger ce probleme en implémentant le constructeur paramétré dans chaque classe dérivée mais y a t'il une meilleure solution 'orienté objet' ?
D'après mes recherches, il n'y a pas d'autres solutions mais peut etre que je n'ai pas trouvé.
Merci
Partager