estoy usando QT 4.8 (C++) para el proyecto de aplicación de escritorio, y escribir el manejo de excepciones es el siguiente:¿Cómo evitar escribir código repetido en bloques catch?
void callerMethod()
{
try
{
method1();
}
catch(Exception1& e)
{
// display critcal error message
// abort application
}
catch(std::Exception& e)
{
// print exception error message
}
catch(...)
{
// print unknown exception message
}
}
void method1()
{
try
{
// some initializations
// some operations (here exceptions can occur)
// clean-up code (for successful operation i.e no exception occurred)
}
catch(Exception1& e)
{
// clean-up code
throw e;
}
catch(Exception2& e)
{
// clean-up code
throw e;
}
catch(Exception3& e)
{
// clean-up code
throw e;
}
catch(...)
{
// clean-up code
throw;
}
}
Así que mi pregunta qué tengo que escribir el código de limpieza en cada bloque catch ? ¿Hay alguna manera de que pueda evitar escribir código repetido?
NOTA :: [En metodo1()] Quiero volver a arrojar excepciones que se produjeron a mi caller.So No puedo atraparlos en un solo bloque catch, ya continuación, escriba la información se perderá .
Probar t o reducir la cantidad de código de limpieza necesario mediante el uso de punteros inteligentes, clases de contenedores, etc. Idealmente, no debería haber ningún código de limpieza. – user763305
Parece que lo que quieres hacer es simplemente 'try {/ * throw * /} catch (specific_exception const & e) {/ * terminate * /}'. Si no le importan los tipos de excepción 'Exception1',' Exception2' y demás, entonces * do not * catch them. –
Además, incluso si capta por referencia, * debería * volver a generar usando 'throw;' en lugar de 'throw e;' para evitar cortar. – ereOn