【发布时间】:2012-08-23 16:13:51
【问题描述】:
我阅读了一篇关于 C++11 中新的 <system_error> 标头的深思熟虑的 series of blog posts。它表示标头定义了一个error_code 类,该类表示操作(例如系统调用)返回的特定错误值。它说头部定义了一个system_error类,这是一个异常类(继承自runtime_exception),用于包装error_codess。
我想知道的是如何将系统错误从errno 实际转换为system_error,以便我可以抛出它。比如POSIX的open函数通过返回-1并设置errno来报错,那么如果我想抛出异常我应该如何完成下面的代码呢?
void x()
{
fd = open("foo", O_RDWR);
if (fd == -1)
{
throw /* need some code here to make a std::system_error from errno */;
}
}
我随意尝试:
errno = ENOENT;
throw std::system_error();
但是当调用what() 时,产生的异常不会返回任何信息。
我知道我可以使用throw errno;,但我想以正确的方式使用新的<system_error> 标头。
system_error 有一个构造函数,它接受一个 error_code 作为其参数,所以如果我可以将 errno 转换为 error_code,那么其余的应该是显而易见的。
这似乎是一个非常基本的东西,所以我不知道为什么我找不到一个好的教程。
我在 ARM 处理器上使用 gcc 4.4.5,如果这很重要的话。
【问题讨论】: