Создайте 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 ++ для доступа к файлам. Я'Я бы хотел, но рефакторинг половины моего кода - это не то, что яЯ хотел бы поступить правильно в этот самый момент.