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