一連の関数があり、スローされる可能性のある例外をエラーコードに変換する必要があります。
この目的のために、実際の呼び出しを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;
}
}
...
これらのキャッチ統計は繰り返されます。さらに、新しい例外が追加されるたびに、すべての呼び出しラッパーに新しいcatch句を追加する必要があります。
catch
ステートメントを置き換えるための以下のようなマクロは適切ですか?
#define CATCH_ALL_EXCEPTIONS \
catch (error1&) { \
return E_ERROR1; \
} \
catch (error2&) { \
return E_ERROR2; \
}
その結果、次のようになります。
int f_with_error_codes()
{
try {
f(); // the wrapped
return E_SUCCESS;
}
CATCH_ALL_EXCEPTIONS