Лучшие практики для подхода "GetLastError" для многоязычного проекта - PullRequest
0 голосов
/ 27 октября 2019

Я работаю над кроссплатформенным проектом, использующим бэкэнд C / C ++ и несколько других языков для внешнего интерфейса. Мне бы хотелось распространять диагностику на внешние интерфейсы из бэкэнда, в стиле Windows «GetLastError», но с иерархическим сообщением: Result: AppError: SystemError.

Идея состоит в том, чтобы получить детальную обратную связь, избегая исключений C ++. Первые два уровня являются пользовательскими enums, а SystemError - это код ошибки, полученный из ОС, т. Е. GetLastError() в Windows и strerror() в другом месте для обнаружения ошибок ОС.

Это так

struct Diagnositcs {
   Result result;
   Error appError;
   MamInt32 osError;
   void Reset() {
        result = Res_NoOp;
        appError = Err_NoError;
        osError = 0;
   }
};

Интерфейс будет периодически опрашивать диагностику, чтобы показать ее.

Теперь мне интересно, как использовать опрос оптимальным образом.

Нужно ли сбрасывать диагностику после каждой успешной операции, чтобы не показывать устаревшие ошибки для успешных операций, или я просто продолжаю обновлять ошибки новыми ошибками? Кажется, в любом случае существует риск пропустить правильную обратную связь в реальном времени. Я не уверен, что "GetLastError" без сброса является лучшим выбором.

Какая лучшая практика здесь? Или вы знаете лучший способ создания прозрачной и удобной схемы сообщений об ошибках?

...