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

rui*_*eco 5 c++ stl error-code c++11

所以,在我理解std::error_code工作原理的过程中,我开始怀疑我们是否真的需要std::error_conditionstd::error_category.我想实现什么在这个这个教程和工作量是它是相当脆弱的(我目前被困试图找出为什么这个代码会导致连接重复的符号错误一起不平凡.

是不是更容易子类化std::error_code,添加message属性和方法然后让我们std::error_code可以比较定义错误代码的枚举?我很难理解为什么我需要std::error_category而且std::error_condition根本不知道.

Fra*_*ank 5

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

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

但是,在编写一个旨在供其他人使用的库时(例如ASIO,因为您链接了think-async.com),情况会发生变化.你可以让一个库接收一个error_code实例,它可以干净利落地传递它,而不必知道任何关于使用该库的代码的信息,或者必须在错误类型上模板化每个错误处理函数.

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

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