我正在开发一个与远程系统通信的库,当它返回有限且已知数量的错误代码时,消息可能会以不可预测的方式发生变化。
所以我exploring std::error_code
作为一种方式为我的库用户提供一种处理C ++原生错误的方法,而不是推出我自己的代码。我不能抛出异常。
std::error_category
的Tutorials始终显示静态实例与返回的硬编码消息一起使用,具体取决于错误代码。
但是如果我们有无法缓存的动态消息呢?我们如何将特定邮件链接到std::error_code
的特定实例?
答案 0 :(得分:1)
简短回答:你真的不能这样做。
error_code
是一种可复制的值类型。如果允许自定义消息,则复制错误将涉及执行消息数据的深层复制或维护重新计数。
这会使错误代码太重而无法在许多应用程序/库内部循环中使用,基本上迫使程序员对代码的那部分使用不同的错误处理机制,使error_code
基本没有意义。
您可以通过使用线程本地错误状态(如旧学校errno
)来解决这个问题,但我建议不要这样做,因为它会阻止您存储错误时间长度。