我正在开发一个系统,该系统旨在使用名为error_code
,error_condition
和error_category
- 一个新的方案 std: 在 C++11 中,尽管目前我实际上正在使用 Boost 实现。我已经阅读了 Chris Kholkoff 的系列文章,现在已经三遍了,我想我大致了解了如何创建这些类。
我的问题是该系统需要处理存在于单个 DLL 中的插件,并且这些插件可能会出现错误。我最初的设计是计划一个特定于系统的错误类别,该类别将包含所有各种错误代码和一个不真正映射到errno
值的特定错误条件的候选清单。这里的问题是,要使 DLL 能够使用这些错误代码之一,它需要访问error_category
应用程序中的唯一实例。我现在通过SetErrorCategory()
从每个 DLL 导出一个函数来处理这个问题,这个函数可以工作,但有点恶心。
我看到的替代解决方案是每个 DLL 都有自己的错误类别和代码,如果需要,还有自己的条件;我怀疑这更像是为这个库功能所设想的。但是,我认为这需要主应用程序的错误方案中的比较功能,该功能了解插件的错误方案,并可以检查应用程序的哪些条件与插件的错误匹配。这似乎更容易出现一堆问题,尽管我还没有尝试实现它。我猜我必须在所有实际逻辑之上从 DLL 中导出整个错误方案。
当然,另一种方法是仅使用 DLL 中的数字错误代码并将它们填充到应用程序端的错误对象中。它具有插件简单的优点,但可能会导致应用程序中的陷阱(例如,处理来自几个不同插件的对象的函数需要注意每个错误的来源)。
所以我的具体问题是:在这三个选项中,你会使用哪个,为什么?哪个明显行不通?当然,我还没有想到更好的方法吗?