c++ - 错误表示和处理

标签 c++ design-patterns error-handling

我正在设计一个跨平台应用程序保护库来与加密狗通信。加密狗能够发送和接收数据 block ,在加密狗的内部文件系统中创建和删除目录和文件等。简而言之,主要的加密狗对象具有实现所有这些功能的方法。不幸的是,这些方法中的任何一种都可能失败。现在我正在考虑如果他们这样做了怎么办:)

最明显的解决方案 是从所有这些方法返回一个 bool 类型的结果,以指示它们是失败还是成功。但是,这会导致有关错误性质的详细信息丢失。

下一个可能的解决方案是返回一个错误代码,但是会有超过 30 种类型的错误。此外,我需要设计一个单独的函数来将所有这些返回代码转换为更具可读性的字符串表示形式。

第三种解决方案是返回一个 bool 类型的结果,但在主加密狗对象中保留一个错误状态对象,以便可以使用GetLastError()喜欢的方法。我正在考虑使用这个。

现在是我的问题。是否有任何其他合理的错误表示和处理模式?您建议我在我的案例中使用什么?

谢谢, 伊利亚

最佳答案

在您提供的选项中,最好的是使用返回码。通常,返回码为零表示成功,每个其他返回码都有自己的正整数值。 30 个错误条件并不多。正如您所说,您必须编写代码将这些代码转换为人类可读的内容,但无论如何您都必须这样做。

不过,我会考虑编写一个异常层次结构来代替错误代码来执行此操作。异常可以比返回代码更具表现力,如果处理得当,代码可以更简洁。您通常会设计您的库,以便为每种类型的错误返回条件提供不同的异常类,每个异常类最终都派生自 std::exceptionwhat() 方法为您提供了放置人工消息构建的位置,异常类型本身描述了错误。

有些人会告诉您,异常“仅”适用于特殊情况,例如您的计算机着火等。这是一个引起激烈争论的论断。我会告诉你那是无稽之谈。仅仅因为它被命名为“异常(exception)”并不意味着您的计算机必须着火才能使用它。异常会给您带来很多好处,其中最大的好处之一就是堆栈展开。仅仅因为错误“足够糟糕”的任意行而阻止自己使用它们是愚蠢的。

关于c++ - 错误表示和处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5625268/

相关文章:

c++ - 命名函数参数与类成员相同

php - 通过自定义错误页面处理 PHP/mysql 错误(包括 fatal error )

error-handling - Magento 2 : Use 404 page instead of autosearch

c++ - GLSL Shader程序随机编译失败

c++ - get_line可以直接填一个std::vector<std::string>吗?

c# - 了解适配器模式

rest - DELETE/collection 某些项目不能删除怎么办?

javascript - 从 Monaco Editor 获取错误

c++ - 默认复制构造函数和复杂的继承层次

java - 访问者模式和策略模式有什么区别?