Создайте std :: error_code из errno в POSIX и GetLastError () в Windows

Мой вопрос: как правильно построитьstd::error_code экземпляры изerrno значения на POSIX иGetLastError() в Windows, чтобы экземпляры можно было сравнить с известными значениями из?std::errc

Более длинное объяснение: моя цель - добавитьstd::error_code экземпляр самодельного объекта исключения, который работает в системах POSIX и Windows на C ++ 11ish.

В моем кроссплатформенном приложении яиспользуя самодельную иерархию классов ввода / вывода, которая использует POSIXfopen() и винда CreateFile() призывает к открытию / созданию файлов. Если это не удается, самодельныйopen_error выдается исключение (оно получено изstd::exceptionда, но этоне один из C ++ 'предварительно определенные классы исключений). Я'я пытаюсь расширить это довольно простое исключение с помощью кода ошибки; чтобы быть более точным с C ++ 11std::error_code если я правильно поняла.

Моя проблема в том, как построить такой объект изerrno (в случае POSIX) илиGetLastError() (в случае с Windows). Для POSIX, насколько яя понял, я могу просто использоватьerrno в 'std::error_codeконструктор, например как это:

std::error_code ec(errno, std::generic_category());

И этоec должно быть сопоставимо с общеизвестными значениями из.std::errc

Для Windows аналогичный вызов может быть сделан, конечно:

std::error_code ec(::GetLastError(), std::generic_category());

Но я'Я не уверен, что значения возвращеныGetLastError() карта хорошо известных констант изstd::errc, Я'мы читалив Boost 'системная библиотека что они делаютдля повышенияс реализациейerror_code, но я'я спрашиваю оstd реализация, а не о Boosts.

Пожалуйста, не'Совет, чтобы перейти к использованию потоков C ++ для доступа к файлам. Я'Я бы хотел, но рефакторинг половины моего кода - это не то, что яЯ хотел бы поступить правильно в этот самый момент.

Ответы на вопрос(2)

Ваш ответ на вопрос