Estoy trabajando en una biblioteca que genera informes de dispositivos. La función de miembro generate_report (const std::string& no)
puede fallar debido a varios motivos:Excepción vs error-code vs. assert
- no válido informe núm.
- estado no válido (el
report_generator
es una FSM) - ningún dispositivo está activo error
- durante la generación de informes
¿Cuál es la mejor para estos errores de manejo de errores mecanismo?
- acaba de regresar
true
ofalse
- código de error de retorno
- afirmar y registrar
- excepción (s) tiro
- cualquier combinación de los anteriores
Parte de la información de contexto: el el flujo de trabajo normal es el siguiente. El usuario activa un dispositivo, elige un informe de una lista y hace clic en "generar".
EDIT: Gracias por las respuestas hasta ahora! Para mí, ahora está claro cuándo usar las afirmaciones y cuándo hacer el manejo de errores. En cuanto a la gestión de errores, los códigos de error y las excepciones tienen pros y contras. Creo que voy por excepciones (y creo cuatro clases para los errores anteriores), pero aún no estoy realmente convencido. Siempre pensé en excepciones de "situaciones inesperadas". Un informe inválido no no es realmente inesperado. ¿Algún consejo? :)
mirada a las preguntas relacionadas http://stackoverflow.com/questions/61219/ debug-assert-vs-specific-throwwn-exceptions, http://stackoverflow.com/questions/1276308/exception-vs-assertion, http://stackoverflow.com/questions/414182/when-to-use-assertion- over-exceptions-in-domain-classes, http://stackoverflow.com/questions/77127/when-to-throw-an-exception, http://stackoverflow.com/questions/17732/when-should-assertions- permanecer en producción de código y tal vez otros. –
Además, observe la etiqueta de manejo de errores. Muchas contribuciones interesantes allí. http://stackoverflow.com/questions/tagged/error-handling –
Muchas gracias, los extrañé por completo porque inicialmente solo busqué preguntas relacionadas con C++ –