tow*_*owi 12 error-handling boost exception boost-asio c++11
我揣摩如何在新system_error一起error_code,error_category而不是(是为了执行最低便携式错误报告)error_condition应该被使用.
我想通过阅读boost.system我明白我应该如何使用error_codes和error_category.该描述省略了在使用system_error`抛出异常时如何结合使用,但是从我可以猜到的那个类的接口.
class system_error : public runtime_error {
public:
// [...]
system_error(error_code ec, const string& what_arg);
system_error(int ev, const error_category& ecat, const string& what_arg);
system_error(int ev, const error_category& ecat);
// [...]
Run Code Online (Sandbox Code Playgroud)
所以,我抛出一个system_error-exception与右int+ error_category或error_code与它的error_category()-方法.
但是提供便携式接口的方式是什么error_condition?
双方error_code 并 error_category都有方法default_error_condition:
class error_category {
public:
// [...]
virtual error_condition default_error_condition(int ev) const noexcept;
// [...]
class error_code {
public:
// [...]
error_condition default_error_condition(int ev) const noexcept;
// [...]
Run Code Online (Sandbox Code Playgroud)
的error_category-instances应预先创建的,例如(用户代码):
struct AppCategory : public error_category {
const char *name() const noexcept override {
return "application"; }
string message(int ev) const override {
switch(ev) {
case 14: return "error message";
default: return "???";
}
}
error_condition default_error_condition(int ev) const noexcept override {
... ??? ...
}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:
default_error_condition的error_category,又如何?error_codes到正确的error_conditions,error_condition实例吗?error_code不应该由用户(我)提供,对吧?有一个很好的例子,我可以看看代码error_condition应该如何由用户扩展,与system_error-exceptions 一起使用?
如果您的错误类别的错误代码可以映射到其中一个std::errc错误代码,那么default_error_condition应该执行该映射,并返回std::error_condition一个类别std::generic_category()和相应std::errc枚举值的值.否则它应返回error_condition引用该类别.
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |