我们真的需要std :: error_category和std :: error_condition吗?

时间:2017-08-24 18:24:27

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

所以,在我了解content[5]如何运作的过程中,我开始怀疑我们是否真的需要std::error_codestd::error_condition。我正在尝试实现thisthis教程中的内容,并且工作量非常重要,而且它相当脆弱(我目前仍在努力弄清楚为什么这段代码会导致链接重复符号的错误。

继承std::error_category是否更容易,添加std::error_code属性&方法,然后让message与定义错误代码的枚举相比较?我很难理解为什么我需要std::error_codestd::error_category

1 个答案:

答案 0 :(得分:5)

主要优点是error_code是一种可复制的类型,可以从库传递到库,而不必涉及任何动态内存分配或模板,使其非常轻量级,易于使用。

如果您正在编写一个完全独立的项目,那么,当您可以拥有自己的类型时,错误代码和类别似乎过于复杂。

然而,当编写一个供其他人使用的库时(例如ASIO,因为你链接了think-async.com),情况会发生变化。您可以让一个库接收一个error_code实例,并且它能够干净有效地传递它,而不必了解使用该库的代码,或者必须使每个错误处理函数都是在错误类型上模板化。

在这种情况下,错误类别在处理多个错误源时很重要,因为给定的错误代码可能意味着基于错误来源的两种不同的东西。

修改:请注意,在您的第一个链接中,类别实际上是单例的。这是在维护轻量级的服务中完成的,因为将指针复制到保证永远不会被删除或修改的对象是便宜的,内存安全的和线程安全的。

相关问题