Categorías <error_sistema> y códigos de error estándar / del sistema
C ++ 11 introdujo el<system_error>
encabezado que contiene un sistema genérico para manejar códigos de error. Unstd::error_code
es una tupla que contiene unint
, el código de error y una referencia a unstd::error_category
, que define el dominio de error y el manejo del código de error. La biblioteca estándar viene con cuatro categorías:std::generic_category
, std::system_category
, std::future_category
ystd::iostream_category
.
Existen conflictos sobre qué categoría usar, tanto aquí en SO como en sitios de referencia de C ++, al crearstd::error_code
s / tirarstd::system_error
s conerrno
y códigos de error WinAPI:
errno
constd::generic_category
: Pues contesta, llvm-commits, cplusplus.comerrno
constd::system_category
: Pues contesta, cppreference.comGetLastError()
constd::generic_category
: Pues contestaGetLastError()
constd::system_category
: Pues contesta, ComentarioSin embargo,errno
yGetLastError()
no puede usar la misma categoría, de lo contrario, algunos códigos de error serían ambiguos. El código de error 33 es un ejemplo, ya que es ambosEDOM
yERROR_LOCK_VIOLATION
.
Incluso hay algunos lugares que abogan por una categoría hecha por el usuario para WinAPI, pero no puedo encontrar ninguna referencia a eso en este momento. Esta alternativa sería especialmente dolorosa.
Con qué categoría se debe utilizarerrno
, y que debe usarse conGetLastError()
así que eso
std::error_code::default_error_condition()
std::error_code::message()
son inequívocos y apropiados para el código de error subyacente?