std :: error_category可用于动态消息吗?

时间:2017-08-25 16:15:18

标签: c++ c++11 error-code

我正在开发一个与远程系统通信的库,当它返回有限且已知数量的错误代码时,消息可能会以不可预测的方式发生变化。

所以我exploring std::error_code作为一种方式为我的库用户提供一种处理C ++原生错误的方法,而不是推出我自己的代码。我不能抛出异常。

使用std::error_category

Tutorials始终显示静态实例与返回的硬编码消息一起使用,具体取决于错误代码。

但是如果我们有无法缓存的动态消息呢?我们如何将特定邮件链接到std::error_code的特定实例?

1 个答案:

答案 0 :(得分:1)

简短回答:你真的不能这样做。

error_code是一种可复制的值类型。如果允许自定义消息,则复制错误将涉及执行消息数据的深层复制或维护重新计数。

这会使错误代码太重而无法在许多应用程序/库内部循环中使用,基本上迫使程序员对代码的那部分使用不同的错误处理机制,使error_code基本没有意义。

您可以通过使用线程本地错误状态(如旧学校errno)来解决这个问题,但我建议不要这样做,因为它会阻止您存储错误时间长度。