我尝试弄清楚新的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);
// [...]
所以,我向system_error
+ 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;
// [...]
error_category
- 实例应该预先创建,例如(用户代码):
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 {
... ??? ...
}
};
我的问题是:
default_error_condition
中实施error_category
,以及如何实施?error_codes
与正确的error_conditions
,error_condition
个实例吗?error_code
,对吧? 是否有一个很好的示例,我可以看一下代码{/ 1}}应该由用户扩展的哪些内容,以及error_condition
- 例外?< / p>
答案 0 :(得分:5)
如果您的错误类别的错误代码可以映射到其中一个std::errc
错误代码,则default_error_condition
应执行该映射,并返回std::error_condition
类别为{{ 1}}和相应的std::generic_category()
枚举值的值。否则,它应返回std::errc
引用该类别。