Héritage de constructeurs
Bonjour a tous, j'ai un petit probleme avec ma conception des exceptions.
J'ai une classe CException avec un constructeur paramétré :
Code:
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;
}; |
J'ai ensuite une hiérarchie de classe dérivée de CException en fonction de l'exception relevée :
Code:
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 probleme est que si je veux lever une exception CExceptionFileOpen par exemple avec comme parametre le nom du fichier :
Code:
1 2 3
|
throw CExceptionFileOpen(filename); |
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.
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