c ++ пользовательский класс кода ошибки или системная ошибка

Мы находимся на самых начальных стадиях большого проекта, и одна из первых вещей, которые нужно сделать, — это определить коды ошибок для разных модулей. Ранее мы использовали систему 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.

Нужен совет — как у вас дела с большими проектами на С ++?

0

Решение

Взгляни на std::error_code в system_errorКажется, делать то, что вы хотите. это хороший учебник о том, как это работает. это пост также подробно объясняет, как это должно работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector