我正在尝试使用该system_error
工具来处理我的图书馆中的错误。如果你觉得它有帮助,我将简要讨论库的结构: 库的命名空间被调用commons
,在这个命名空间下我有另一个命名空间dynlib
. dynlib
包含负责加载 .so/.dll 文件的类:
namespace commons {
namespace dynlib {
class DynLibLoader {
};
}
}
DynLibLoader 中可能出现的错误LibraryFailedToLoad
是LibraryFailedToUnload
和SymbolNotFound
。所以我处理错误的想法如下:我将在命名空间error
下添加一个命名空间dynlib
。然后,在该命名空间下,我将定义一个 enum forstd::error_codes
和一个 enum for std::error_conditions
。据我了解,std::error_codes
必须对应于errno
(Linux) 或GetLastError
(Win32) 的std::error_conditions
值LibraryFailedToLoad
,以及 等值SymbolNotFound
。所以,这是我的问题:
- 我的理解
std::error_code
是否std::error_condition
正确? - 我应该如何知道所有可能的值
errno
并GetLastError()
在我的std::error_codes
枚举下定义它们?如果 Microsoft 将来向 API 添加额外的错误值怎么办?我是否必须返回源代码并在我拥有的枚举下定义它们std::error_codes
? - 如果我们在另一个平台上并且在发生错误时无法找出确切的系统错误代码怎么办?
- 如果我想
std::error_codes
为整个公共命名空间使用相同的名称,并且只std::error_condition
为每个子名称空间定义一个不同的名称,例如dynlib
. 这是一个好习惯吗?我会说是的,因为这将避免重复代码。但这背后有什么问题吗? - 目前,我
std::error_category
为公共的每个子命名空间使用一个。这是一个好习惯吗?你认为我应该使用std::error_category
不同的方式吗?