Мы находимся на самых начальных стадиях большого проекта, и одна из первых вещей, которые нужно сделать, — это определить коды ошибок для разных модулей. Ранее мы использовали систему 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.
Нужен совет — как у вас дела с большими проектами на С ++?
Взгляни на std::error_code
в system_error
Кажется, делать то, что вы хотите. это хороший учебник о том, как это работает. это пост также подробно объясняет, как это должно работать.
Других решений пока нет …