menos alambre
No entiendo muy bien por qué necesitamos hacer una distinción entre el código de error (std::error_code)
y un error condition(std::error_condition)
, no son lo mismo? ¿Cuáles son las ventajas de una condición de error frente a un código de error?
Jimbo
De http://en.cppreference.com/w/cpp/error/error_condition
std::error_condition es un código de error independiente de la plataforma. Al igual que std::error_code, se identifica de forma única por un valor entero y std::error_category, pero a diferencia de std::error_code, el valor no depende de la plataforma.
Entonces, la ventaja es que su código de error no es específico de la plataforma en la que está trabajando cuando usa std::error:condition
.
Con un std::error_code
Cada objeto std::error_code contiene un par de códigos de error que se originan en el sistema operativo o alguna interfaz de bajo nivel
Entonces el error_code
hará referencia a algo específico de su plataforma, una pieza de hardware, etc.
Puede ser ventajoso usar ambos. El error_condition
es la “abstracción portátil”, por lo que sería el mensaje de error genérico para dar al usuario y al error_code
sería la información dependiente de la plataforma que sería útil para la depuración específica.
Una implementación típica [of error_condition] contiene un miembro de datos entero (el valor) y un puntero a std::error_category.
marat abrarov
La respuesta más simple a esta pregunta que encontré aquí: http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html.
- clase
std::error_code
– representa un valor de error específico devuelto por una operación (como una llamada al sistema).- clase
std::error_condition
– algo que desea probar y, potencialmente, reaccionar en su código.
Creo que también es aplicable para C++ 11.
robinson
Una buena denominación tiene un gran impacto en la comprensión. Con el zoológico de cosas erróneas con nombres muy similares introducido en C++ 11…
std::errc - an error code
std::error_code - a different error code?
std::error_condition - yet another kind of error code 🤔
std::error_category - a utility helper interface for error codes 😵
… Tuve que hacer un mapa mental solo para ordenarlos a todos:
std::errc -> std::posix_error_code
std::error_code -> std::platform_dependent_error
std::error_condition -> std::platform_independent_error
std::error_category -> std::error_domain/utility/mapper
std::system_category -> std::platform_dependent_error_domain
std::generic_category -> std::platform_independent_error_domain
std::future_errc -> std::future_error_code
std::future_category -> std::future_error_domain
std::io_errc -> std::iostream_error_code
std::iostream_category -> std::iostream_error_domain
Ambos errores dependientes de la plataforma y errores independientes de la plataforma sostenga un código y un puntero a un clase auxiliar de utilidad para asignar esos códigos de error específicos del dominio a un mensaje. A pesar de tener interfaces casi idénticas {asignar, borrar, valor, mensaje…}, no heredan de una clase base común, lo que significa que no puede llamar genéricamente a uno u otro método. 🤦♂️
Observa eso std::error_code
no es un código de error, sino una combinación de código de error + más dominio/categoría, mientras que std::errc
es un actual código de error (un valor numérico). Buenas ideas – nombres horribles 🙃.