gpt4 book ai didi

c++ - c++ 中的自定义(非异常)错误处理策略

转载 作者:太空狗 更新时间:2023-10-29 21:29:44 25 4
gpt4 key购买 nike

出于 X 或 Y 原因,人们在必要时在 C++ 中使用什么错误处理方案来避免异常?我已经实现了自己的策略,但我想知道其他人的想法,并就每种方法的优缺点进行讨论

现在,为了解释我在特定项目上使用的方案,可以这样总结。通常需要抛出的方法,实现如下接口(interface):

bool methodName( ...parameters.... , ErrorStack& errStack)
{
if (someError) { errStack.frames.push_back( ErrorFrame( ErrorType , ErrorSource ) );
return false;
}
... normal processing ...
return true;
}

简而言之,返回参数表示处理是否正常或发生错误。错误堆栈基本上是错误帧的 std::vector,其中包含有关错误的详细信息:

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();
}
};

这种方法的优点是详细的错误堆栈类似于 java 异常给出的错误,但没有异常的运行时开销。主要缺点是(除了非标准性和我仍然必须以某种方式处理来自第三方代码的异常并转换为 ErrorCondition),很难维护 ErrorCondition 枚举,因为源库的多个组件需要不同的错误,因此该策略的第二个版本可以对错误条件使用某种继承层次结构,但我仍然不确定实现它的最佳方法

最佳答案

关于c++ - c++ 中的自定义(非异常)错误处理策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com