Ah... j'avais pas pensé à une fonction template, et je connaissais pas boost::bind. Du coup j'ai utilisé à contre coeur des macros. Surtout que je vois parfaitement où je pourrais caser ça. J'ai une classe error manager que j'utilise ainsi :
Ces macros valent en gros :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void MyDlg::buttonStartClicked() { TRY_EM( "MyDlg::buttonStartClicked()" ) this->Model.Start(); CATCH_EM }
En debug seules les erreurs destinnéées à l'utilisateur sont traitées, le reste c'est des erreurs internes (assertion maison qui foire, division par zero, etc...) et je les traite pas pourque le debugger m'y emène.
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 #define TRY_EM( name ) \ {\ ErrorManager em( name ); \ try \ {\ #ifdef DEBUG #define CATCH_EM \ }\ catch ( const UserException & e )\ {\ em.Error( e );\ }\ } #else #define CATCH_EM \ }\ catch ( const UserException & e )\ {\ em.Error( e );\ }\ catch ( const InternalException & e )\ {\ em.Error( e );\ }\ catch ( const std::bad_alloc & e )\ {\ em.Error( e );\ }\ catch ( const std::exception & e )\ {\ em.Error( e );\ }\ catch ( ... )\ {\ em.CriticalError();\ }\ } #endif
Avec un zoli template, ca deviendrait :
8)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void MyDlg::buttonStartClicked() { ErrorManager em( "MyDlg::buttonStartClicked()" ); em.SafeCall( this->Model.Start ); }
Partager