std::error_code更多的例子
时间: 2024-01-19 20:04:21 浏览: 142
以下是一些更多的使用`std::error_code`的例子:
1. 判断函数返回值是否为错误码
```cpp
std::error_code ec;
if (some_function(arg1, arg2, ec)) {
// 处理错误
}
```
在函数`some_function`中,如果发生了错误,它会将错误码存储在`ec`中,并返回`true`,否则返回`false`。在这个例子中,我们使用`if`语句判断返回值是否为错误码,并在发生错误的情况下处理错误。
2. 抛出异常
```cpp
std::error_code ec;
if (some_function(arg1, arg2, ec)) {
throw std::system_error(ec, "some_function failed");
}
```
在这个例子中,如果函数`some_function`返回错误码,我们抛出一个`std::system_error`异常,并将错误码和错误消息传递给异常构造函数。这样,我们就可以在异常处理程序中捕获并处理异常。
3. 自定义错误码类别
```cpp
class my_error_category : public std::error_category {
public:
const char* name() const noexcept override {
return "my_error_category";
}
std::string message(int ev) const override {
switch (static_cast<my_error_code>(ev)) {
case my_error_code::ok:
return "ok";
case my_error_code::file_not_found:
return "file not found";
case my_error_code::invalid_argument:
return "invalid argument";
default:
return "unknown error";
}
}
};
std::error_code make_error_code(my_error_code e) {
static my_error_category category;
return {static_cast<int>(e), category};
}
int main() {
std::error_code ec = my_error_code::file_not_found;
std::cout << ec.message() << std::endl;
return 0;
}
```
在这个例子中,我们自定义了一个错误码类别`my_error_category`,并在其中重载了`name`和`message`方法。`name`方法返回类别的名称,`message`方法返回错误码对应的消息。然后我们定义了一个`make_error_code`函数,用于将枚举类型转换为`std::error_code`对象。在`main`函数中,我们将枚举类型转换为`std::error_code`对象,并输出错误消息。
通过以上例子,我们可以了解到`std::error_code`的更多用法,它可以方便地表示和处理各种错误类型,并且可以自定义错误码类别。
阅读全文