使用C++异常来取代exit()函数[2]
原始代码缺少恢复或记录功能。如果出现错误,程序就会“消失”,让用户无所适从。下面是重组后的代码。请注意,函数修饰符不会被修改:
Void main() {
//初始化
...
尝试{
processmail(...);
} catch(int ret){
switch(ret){
case E _ initial ization _ FAILURE:...
情况E _不可挽回:...
...
}
}
}
Void ProcessMail(...){
//初始化
...
if(initialization error){
throw(e _ initial ization _ failure);
}
而(!关机){
尝试{
阅读邮件(...)
} catch(int ret){
switch(ret){
case e _ read _ error:
//记录错误...
//正在尝试恢复
...
if(已恢复){
继续;
} else {
throw(E _不可恢复);
}
break;
案例...
}
}
/继续处理
...
}
//throw()可以用来替换丢失的返回码
//但是要注意这样做造成的性能损失。
扔(S _ OK);
} // ProcessMail()
作废已读邮件(...)
{
...
//这里不需要捕捉异常
nbytes available = read bytes(...)
...
}
Int字节(...)
{
/Read data
if(error){
throw(e _ Read _ error);
}
return nbytes read;
}
0条评论