我的意思是,我知道所有关于throw、try{}catch{}的语言规则,但我不确定在实际世界中是否正确使用它们。请看以下示例:
我们有一大段科学代码,可以进行各种图像处理,最近我们决定将其改进并使其更加健壮。其中一个经常使用的例程是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个地方被使用,我是否应该用 try{} catch{} 来包装每个 rotate_in_place() 的调用呢?这样做看起来会使代码变得非常臃肿。另一个可能性是不包装任何 try{} catch{} 并让程序退出,但这与仅仅使用 exit() 有什么不同吗?
if (sz.nx != sz.ny) {
cerr << "Error: non-squared image error!\n";
exit(0);
}
简而言之,我对使用throw、try和catch的真正好处不太确定,有什么好的建议吗?
std::vector
来存储数据(或者也可以使用Boost.MultiArray),使用某种类型的Image
结构体来同时保存数据和元数据。不关心质量似乎不太科学。 - Cat Plus Plus