最近我一直在转换一些库,使用< system_error>设施在C 11.
我很难理解std :: error_code与std :: error_condition的用例.
基本的区别是std :: error_code应该表示一个系统或平台特定的错误,而std :: error_condition是API或用户界面应该返回的抽象错误.
好的 – 但是我很难理解为什么我们会在实践中使用std :: error_code.在我看来,你要去:
处理系统特定的错误报告机制(如
说,errno或从POSIX呼叫返回的东西,或者说一个电话
在Linux上使用SO_ERROR来getsockopt)可以轻松地实现
通过std :: errc枚举转换为std :: error_condition,这些枚举应该是可移植的.
>使用用户定义的错误类别,代表应用程序级别
或业务逻辑错误,如“无效的社会保障号码”或
什么 – 这也将是一个用例
的std :: error_condition.
>处理一些定义自己的错误报告机制的低级接口或库,例如OpenSSL,在这种情况下,您将直接使用特定于平台的错误机制.在这种情况下,您需要将这些错误转换或映射到std :: error_code.但是,如果要将这些平台特定的错误转换成类似std :: error_code的常规错误,为什么不将其转换为std :: error_condition?
此外,由于POSIX系统错误应该是可移植的,并且由于它们通过std :: errc枚举与std :: error_condition一一对应,所以我找不到std :: error_code的任何用例.大多数Linux / UNIX系统调用设置errno,它应该可移植地映射到std :: error_condition.
所以我没有看到任何使用std :: error_code的用例.那么,我们想要使用std :: error_code而不是std :: error_condition的例子是什么呢?