c ++自定义错误代码类或系统错误

时间:2017-03-29 04:25:25

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

我们处于大型项目的最初阶段,最初要做的事情之一就是定义不同模块的错误代码。以前我们使用系统errno作为错误代码并使用strerror()来打印错误。这非常简单并且工作正常[我们之前的大多数代码都是C可能是10%C ++]。

在新项目[完全用C ++]中,我很困惑,如果我们应该遵循这一点。或者定义我们自己的错误类。

例如:

enum class ErrorCode {

FILE_EXIST = EEXIST,
ACCESS_DENIED = EACCESS,
...
};

const char *error_str (ErrorCode code)
{
    switch (code) {
        case ACCESS_DENIED: return "Access denied";
        ...
    }
}

class Error {
   Error (ErrorCode code) : _code (code){}
   Error() : _code(0){}

   void operator = (ErrorCode code);
   bool operator == (ErrorCode code);
   operator bool() {return _code != 0;}
   const char *string() { return error_str(_code);}

private:
   ErrorCode _code;
};

这只是一个带有一些C ++糖的包装类。但是在定义了这个之后,我认为它不会给int / strerror()添加任何值,除了扩展的可能性并且不必要地使事情变得冗长。我猜以上并没有比errno增加太多的性能损失,因为它只有一个int。

需要建议 - 根据您对大型c ++项目的体验,它是如何实现的?

1 个答案:

答案 0 :(得分:0)

看看std::error_code中的system_error,似乎做了你想做的事。 This是一个关于它如何工作的好教程。 This帖子还详细解释了它应该如何运作。