つまり、throw、try {} catch {} に関するすべての言語ルールを知っていましたが、実際にそれらを正しく使用しているかどうかはわかりません。次の例を参照してください。
私たちは、あらゆる種類の画像処理を行う大きな科学的コードを持っています。最近、それを改良してより堅牢にすることにしました。頻繁に使用されるルーチンの 1 つはvoid rotate_in_place(float* image, image_size sz)です。
より堅牢にするために、コードの先頭にサニティ チェックを追加します。
void rotate_in_place(float* image, image_size sz) {
// rotate_in_place does not support non-square image;
if (sz.nx != sz.ny) throw NonSquareImageError;
// rotate_in_place does not support image too small or too large
if (sz.nx <= 2 || sz.nx > 1024) throw WrongImageSizeError;
// Real rode here
.....
}
問題は、rotate_in_place() が 1000 を超える場所で使用されていることです。rotate_in_place() の各呼び出しを try{} catch {} でラップする必要があります。これにより、コードが非常に肥大化するように見えます。もう 1 つの可能性は、try{} catch{} をラップせずにプログラムを終了させることですが、これは単に使用することとどう違うのですか
if (sz.nx != sz.ny) {
cerr << "Error: non-squared image error!\n";
exit(0);
}
要するに、throw、try、catch を使用することの本当の利点についてはよくわかりませんが、何か良い提案はありますか?