Estoy desarrollando una C api para algunas funcionalidades escritas en C++ y quiero asegurarme de que no se propaguen excepciones de ninguna de las funciones C exportadas.Reutilización de código en el manejo de excepciones
La forma más sencilla de hacerlo es asegurarse de que cada función exportada está contenida en una:
try {
// Do the actual code
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Digamos que sé una excepción que se olvida a menudo dentro del código C++ es std :: bad_alloc y quiero tratarlo especialmente me gustaría escribir algo como esto en su lugar:
try {
// Run the actual code
} catch (std::bad_alloc& e) {
return ERROR_BAD_ALLOC;
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
¿es posible descomponer esto de alguna forma inteligente para que en todo el mundo pueden tratar algunos errores de forma diferente y sin la adición de una nueva declaración de capturas para el manejador de excepción en todo cada función exportada?
Soy consciente de que esto es posible de resolver con el preprocesador, pero antes de seguir por ese camino, me aseguraré de que no haya otra forma de hacerlo.
+1: Buena idea :-) –
Funcionó perfectamente. ¡Gracias! – Laserallan
En código real, no olvide capturar excepciones por referencia: catch (std :: bad_alloc &) – Jem