我阅读了一系列关于C++11中新标头的深思熟虑的博客文章。<system_error>
它表示标头定义了一个error_code
类,该类表示操作(例如系统调用)返回的特定错误值。它说头部定义了一个system_error
类,它是一个异常类(继承自runtime_exception
),用于包装error_codes
s。
我想知道的是如何将系统错误从实际转换errno
为 asystem_error
以便我可以抛出它。例如,POSIXopen
函数通过返回 -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,如果这很重要的话。