所以,在我了解content[5]
如何运作的过程中,我开始怀疑我们是否真的需要std::error_code
和std::error_condition
。我正在尝试实现this和this教程中的内容,并且工作量非常重要,而且它相当脆弱(我目前仍在努力弄清楚为什么这段代码会导致链接重复符号的错误。
继承std::error_category
是否更容易,添加std::error_code
属性&方法,然后让message
与定义错误代码的枚举相比较?我很难理解为什么我需要std::error_code
和std::error_category
。
答案 0 :(得分:5)
主要优点是error_code
是一种可复制的类型,可以从库传递到库,而不必涉及任何动态内存分配或模板,使其非常轻量级,易于使用。
如果您正在编写一个完全独立的项目,那么,当您可以拥有自己的类型时,错误代码和类别似乎过于复杂。
然而,当编写一个供其他人使用的库时(例如ASIO,因为你链接了think-async.com),情况会发生变化。您可以让一个库接收一个error_code
实例,并且它能够干净有效地传递它,而不必了解使用该库的代码,或者必须使每个错误处理函数都是在错误类型上模板化。
在这种情况下,错误类别在处理多个错误源时很重要,因为给定的错误代码可能意味着基于错误来源的两种不同的东西。
修改:请注意,在您的第一个链接中,类别实际上是单例的。这是在维护轻量级的服务中完成的,因为将指针复制到保证永远不会被删除或修改的对象是便宜的,内存安全的和线程安全的。