如果出于X或Y原因有必要,在++中采用哪些错误处理办法避免例外情况? 我已经执行了我自己的战略,但我想知道其他人的到来,并就每个办法的效益和缺点展开讨论。
现在,为了解释在某个特定项目中采用“i m”办法,可以总结一下。 2. 通常要求投掷的方法,如:
bool methodName( ...parameters.... , ErrorStack& errStack)
{
if (someError) { errStack.frames.push_back( ErrorFrame( ErrorType , ErrorSource ) );
return false;
}
... normal processing ...
return true;
}
简言之,回归参数是指加工是ok还是有误。 The Error Stack is basic a 档:vector of misframe which contained details information about the wrong:
enum ErrorCondition {
OK,
StackOverflowInminent,
IndexOutOfBounds,
OutOfMemory
};
struct ErrorFrame {
ErrorCondition condition;
std::string source;
ErrorFrame( ErrorCondition cnd , const char* src ) : condition(cnd) , source(src) {}
inline bool isOK() const {
return OK == condition;
}
};
struct ErrorStack {
std::vector< ErrorFrame > frames;
void clear() {
frames.clear();
}
};
这种做法的好处是,存在类似于支离破碎例外情况的错误,但是没有例外的操作时间。 主要的缺点是,(除了非标准性之外,如果仍然必须处理第三方法的例外情况,某种方式和排在傲慢状态之外),很难坚持这种傲慢状态,因为来源基础的多个组成部分需要不同的错误,因此,这一战略的第二版可能会对错误条件使用某种继承等级,但对于实现这种制度的最佳方式仍然缺乏信心。