- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个系统,该系统旨在使用名为 error_code
、error_condition
和 error_category
的类——一个新的方案std:在 C++11 中,尽管目前我实际上正在使用 Boost 实现。我读过 Chris Kholkoff 的 series of articles ,现在三遍了,我想我了解了如何创建这些类。
我的问题是这个系统需要处理存在于单个 DLL 中的插件,而插件可能会出错。我最初的设计是计划一个特定于系统的错误类别,该类别将包含所有各种错误代码和未真正映射到 errno
值的特定错误条件的候选列表。这里的问题是,要使 DLL 能够使用这些错误代码之一,它需要访问应用程序中 error_category
的唯一实例。我现在通过从每个 DLL 中导出一个 SetErrorCategory()
函数来处理这个问题,它可以工作但是有点恶心。
我看到的替代解决方案是每个 DLL 都有自己的错误类别和代码,如果需要,还有自己的条件;我怀疑这更像是为这个库功能所设想的。但是,我认为这需要在主应用程序的错误方案中有一个比较函数,该函数了解插件的错误方案,并可以检查哪些应用程序的条件与插件的错误相匹配。这似乎更容易出现一堆问题,尽管我还没有尝试实现它。我猜我必须在所有实际逻辑之上从 DLL 导出整个错误方案。
当然,另一种方法是仅使用 DLL 中的数字错误代码并将它们填充到应用程序端的错误对象中。它具有插件简单的优点,但可能会导致应用程序出现问题(例如,一个函数处理来自几个不同插件的对象需要注意每个错误的来源)。
所以我的具体问题是:在这三个选项中,您会使用哪个,为什么?哪个明显行不通?当然,还有我没有想到的更好的方法吗?
最佳答案
我在处理这个问题时得出的解决方案是使用预定义代码来处理问题系列和用户子代码选择,以及针对特定错误类型的继承。使用 boost 这让我可以通过以下方式继承特定类型:
struct IOException : virtual std::exception, virtual boost::exception {};
struct EOFException : IOException {};
...
并保留与 IOException 等预定义一般错误相匹配的错误代码。因此,我可以为每个错误系列提供一个通用代码范围:
namespace exception { namespace code {
UNKNOWN_EXCEPTION = 0;
IO_EXCEPTION = 100;
CONCURRENCY_EXCEPTION = 200;
...
}}
然后,如果有人想要一个新的错误类型,他们可以从已经定义的通用异常类型和与该错误一起出现的代码继承,并通过继承类型和次要值 (0-99) 专门化异常。这也允许 try catch block 捕获更具体的错误类型,同时让更通用的异常版本传递给其他控制 block 。然后用户可以自由使用父异常代码或指定他们自己的家庭代码(parent = 100 -> child = 115)。如果用户只是想要一个 IOError,而不需要创建新的错误系列,他们可以毫不费力地使用默认的系列异常。我发现这为用户提供了灵 active ,而无需 OCD 在他们不想要时跟踪异常代码。
然而,这绝不是最终的解决方案,因为个人偏好引导了我在这里的设计选择。我发现有太多的错误代码变得困惑,异常继承已经编码了这个信息。实际上,在我描述的系统中,很容易完全去除错误代码并仅依赖异常继承,但许多人更喜欢为每个异常名称分配一个代码。
关于C++11(或 Boost)system_error 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169495/
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林。 今天跟大家聊聊,常见的缓存更新策略。 Cache Aside(旁路缓存)策略; Rea
我使用 git 多年,最近为了一个项目改用 mercurial。在过去的 6 个月里,我已经学会了如何通过命令行很好地使用 Mercurial。 这可能是我的想象,但在我看来,mercurial 在
这个问题适合任何熟悉的人 Node.js express Passport 带有 Passport 的 JWT 身份验证(JSON Web token ) Facebook OAuth2.0 或谷歌
在 Coq 中,当试图证明记录的相等性时,是否有一种策略可以将其分解为所有字段的相等性?例如, Record R := {x:nat;y:nat}. Variables a b c d : nat.
我正在处理的项目目前只有一个 Bootstrap 文件,用于初始化应用程序中的所有 javascript 对象。类似于下面的代码 if(document.getElementById('nav'))
我正在考虑使用 OpenLDAP 在首次登录时添加密码到期和强制更改密码。 似乎使用 ppolicy 覆盖来实现这一点。 当我在 ppolicy.schema 中看到这个时,我开始使用 ppolicy
这基本上是我昨天问的一个问题的重新陈述,因为我得到的一个答案似乎没有理解我的问题,所以我一定是不清楚。我的错。 因为 WPF 依赖于 DirectX,所以它对卡和驱动程序的内部非常敏感。我有一个案例,
我是单点登录(SSO)概念的新手。我开始知道 SAML 请求和响应是实现 SSO 流程的最佳方式。然后我开始阅读有关 SAML2.0 的信息。我来了一个术语 NameIdPolicy 在 saml1.
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
在 Azure 上创建新的 SQL 数据库时,它将“计算+存储”选项设置为“2 vCore + 32GB 数据最大大小”作为默认配置,但我不想使用 vCore,我可以更改它。但问题是,是否可以通过策略
我希望创建一项策略,防止在未启用身份验证的情况下创建应用服务(仅审核它们是不够的)。 以下策略可以正确识别未启用身份验证的现有资源: { "mode": "All", "policyRule"
我正在尝试从现有 AuditIfNotExists 策略创建 DeployIfNotExists 策略。部署时不会出错,但会错误提示“没有相关资源与策略定义中的效果详细信息匹配”。当评估政策时。当我将
我正在尝试从现有 AuditIfNotExists 策略创建 DeployIfNotExists 策略。部署时不会出错,但会错误提示“没有相关资源与策略定义中的效果详细信息匹配”。当评估政策时。当我将
我正在使用 wunderground 的 json api 来查询我网站上的天气状况。 api 为我提供了一个包含所有必要数据的漂亮 json 对象,但我每天只能进行多次调用。存储这些数据的首选方式是
我有一个名为可视化数据结构的项目。我有这样的 OOP 设计。 Class VisualDataStructures extends JFrame Class ControlPanel extends
这个问题在这里已经有了答案: 关闭 14 年前。 副本: Use javascript to inject script references as needed? Javascript 没有任何指
Android 应用程序遇到了一些 ANR 问题,因此我实现了 StrictMode 策略。以前从未使用过这个,所以希望有人可以帮助解释以下内容: 为什么日志显示 2 个看似相似的违规行为,除了前 4
我目前正在尝试解决一个问题。假设我们在路上行驶,我们知道路上有 10 家酒店。每家酒店都有 0 到 6 星。我的问题是:找到选择星级酒店的最佳解决方案。唯一的问题是:您不能回头去参观您已经决定不去的酒
我正在将我的应用程序迁移到 MVP。从这个 konmik 中获得了有关静态演示者模式的提示 这是我的简要 MVP 策略。为简洁起见,删除了大部分样板和 MVP 监听器。这个策略帮助我改变了方向,证明了
我是一名优秀的程序员,十分优秀!