【发布时间】:2011-08-22 00:00:50
【问题描述】:
我试图弄清楚新的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);
// [...]
所以,我用正确的int+error_category 或error_code 及其error_category()-方法抛出一个system_error-异常。
但是用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-Instances 应该是预先创建的,例如(user-code):
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 {
... ??? ...
}
};
我的问题是:
- 我应该在
error_category中实现default_error_condition,以及如何实现? - 或者我如何将
error_codes连接到正确的error_conditions, - 我应该预先构造
error_condition实例吗? - 一个类
error_code不应该由用户(我)提供,对吧?
有没有一个很好的例子可以让我看看error_condition 应该如何被用户扩展,连同system_error-exceptions?
【问题讨论】:
标签: exception boost error-handling boost-asio c++11