私は一連の関数を持っており、スローされる可能性のある例外を エラーコードに変換する必要があります。別の場所で一連の例外を捕捉するマクロは問題ありませんか?
は、この目的を達成するために、私は、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;
}
}
...
これらのキャッチstatmementsが自分自身を繰り返します。さらに、新しい例外 が追加されるたびに、新しい呼び出し句を各呼び出しラッパーに追加する必要があります。
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
なぜ私は適切ではないでしょうか?それはあなたのコードを正しく書く方法に依存しますか? –
@markus_pであり、後の時点でどのように他のコードを読み込むか(保守性)によっても異なります。 – iammilind
@iammilind trueですが、g_with_error_codesは実際にこれらのすべて(可視性)を既に無効にしています。この場合、マクロはソースに掘り下げた人の目にだけ見えます。 –