Mam zestaw funkcji i muszę przekonwertować potencjalnie zgłaszane wyjątki na kody błędów .Czy makro jest w stanie złapać zestaw wyjątków w różnych miejscach w porządku?
W tym celu mam owinięty rzeczywiste połączenia ze sprawozdania 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;
}
}
...
Te statmements połowowe powtarzają się. Dodatkowo, gdy dodawany jest nowy wyjątek , do każdego opakowania wywołania musi zostać dodana nowa klauzula catch.
Czy poniższe makro zastępuje instrukcje catch
?
#define CATCH_ALL_EXCEPTIONS \
catch (error1&) { \
return E_ERROR1; \
} \
catch (error2&) { \
return E_ERROR2; \
}
Które skutkuje:
int f_with_error_codes()
{
try {
f(); // the wrapped
return E_SUCCESS;
}
CATCH_ALL_EXCEPTIONS
dlaczego nie mogę być odpowiednie? zależy to od tego, jak chcesz poprawnie napisać swój kod? –
@markus_p, zależy to również od tego, jak inne czyta kod w późniejszym czasie (tj. Łatwość konserwacji). – iammilind
@iammilind prawda, ale g_with_error_codes faktycznie zabija wszystkie te (widoczność) już. w tym przypadku makro jest widoczne tylko dla faceta, który przekopuje się do źródła. –