Ho un set di funzioni e ho bisogno di convertire le eccezioni potenzialmente lanciate nei codici di errore .Una macro è in grado di rilevare una serie di eccezioni in luoghi diversi?
A tal fine ho avvolto le chiamate reali con le dichiarazioni try/catch:
int f_with_error_codes()
{
try {
f(); // wrapped function call
return E_SUCCESS;
}
catch (error1&) {
return E_ERROR1;
}
catch (error2&) {
return E_ERROR2;
}
}
int g_with_error_codes(int a);
{
try {
G g(a); // wrapped expressions
g.print();
return E_SUCCESS;
}
catch (error1&) {
return E_ERROR1;
}
catch (error2&) {
return E_ERROR2;
}
}
...
Questi statmements di cattura si ripetono. Inoltre, ogni volta che viene aggiunta una nuova eccezione , è necessario aggiungere una nuova clausola di catch a ogni call wrapper.
È una macro simile di seguito per la sostituzione delle istruzioni catch
appropriate?
#define CATCH_ALL_EXCEPTIONS \
catch (error1&) { \
return E_ERROR1; \
} \
catch (error2&) { \
return E_ERROR2; \
}
Quali sarebbero i risultati in:
int f_with_error_codes()
{
try {
f(); // the wrapped
return E_SUCCESS;
}
CATCH_ALL_EXCEPTIONS
perché non dovrei essere appropriato? dipende da come vuoi scrivere il tuo codice giusto? –
@markus_p, dipende anche da come altri legge il codice in un secondo momento (ovvero la manutenibilità). – iammilind
@iammilind true, ma g_with_error_codes uccide effettivamente tutti questi (visibilità) già. in questo caso la macro è visibile solo per il ragazzo che scava nella fonte. –