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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| void bar()
{
/* nous savons que foo() peut lancer trois exceptions différentes,
* mais nous ne sommes pas en mesure de les gérer,
* nous laissons donc les exceptions remonter gentiment
*/
foo();
}
void autreFonction()
{
/* ici, nous sommes en mesure de gérer une partie de l'exception
* TooManyValues et la totalité de BadFileFormat
* nous prévenons le compilateur qu'il doit s'attendre à ce qu'une
* exception soit lancée
* Comme les autres exceptions ne seront pas attrapées, elles
* remontenront gentiment
*/
try
{
/* il y a peut etre à faire avant */
bar();
/* ... et après (si ca s'est bien passé */
}
/* nous récupérons TooManyValues */
catch(TooManyValues & e)
{
/* nous traitons ce que nous pouvons et nous la relançons
* pour que la fin de la solution soit apportée là ou ca peut
*/
throw e();
}
*/ nous récupérons BadFileFormat
catch (BadFileFormat &e)
{
/* nous la traitons, et comme le système est cohérent, nous ne la
* relançons pas
*/
}
/* Ce qu'il faut faire qu'il y ait eu ou non une exception BadFileFormat
* (mais qui ne sera pas exécuté si une autre exception est survenue)
*/
}
void deuxiemeFonction()
{
/* on ne sait rien traiter ici */
/* ce qu'on doit faire avant de risquer le problème */
autreFonction();
/* ce qu'on doit faire s'il n'y a pas eu de problème */
}
void troisiemeFonction()
{
/* ici, nous pouvons apporter la fin de la solution à TooManyValues
* si d'autres exceptions arrivent ici, elle remonteront encore
*/
try
{
/* on ne sait rien traiter ici */
/* ce qu'on doit faire avant de risquer le problème */
deuxiemeFonction();
/* ce qu'on doit faire s'il n'y a pas eu de problème */
}
catch(TooManyValues & e)
{
/* nous la traitons, et comme le système est cohérent, nous ne la
* relançons pas
*/
}
/* Ce qu'il faut faire qu'il y ait eu ou non une exception TooManyValues
* (mais qui ne sera pas exécuté si une autre exception non encore
* traitée est survenue)
*/
}
int main()
{
/* !!!dernier rempart avant le plantage!!! */
/* des choses qui ne risquent absolument pas de poser problème
try
{
/*peut etre d'autres choses */
troisiemeFonction();
/* tu commence à comprendre le principe ;) */
}
/* Nous pouvons nous assurer de prendre toutes les exceptions
* FileReadError, car il y a peut etre d'autres fonctions qui
* lancent des exceptions similaires, sans être en mesure de les traiter
*/
catch(FileReadError &e)
{
/* Ce que l'on peut encore traiter ...
* il vaut mieux ne pas relancer l'exception sous peine de plantage
* par contre, nous pouvons faire sortir le programme "proprement"
* sur une erreur
*/
return 1;
}
/* il y a peut etre quelque chose à faire, juste avant de quitter
* l'application
*/
return 0;
} |
Partager