我们处于大型项目的最初阶段,最初要做的事情之一就是定义不同模块的错误代码。以前我们使用系统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 ++项目的体验,它是如何实现的?