Sto usando QT 4.8 (C++) per il progetto applicazione desktop, e la scrittura di gestione delle eccezioni, che è la seguente:Come evitare di scrivere codice ripetuto nei blocchi di cattura?
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;
}
}
Quindi la mia domanda ho bisogno di scrivere il codice di clean-up in ogni blocco catch ? È possibile che io possa evitare di scrivere codice ripetuto?
NOTA :: [In method1()] Voglio ri-generare eccezioni che si sono verificati alla mia caller.So non posso prenderli in blocco catch singolo, perché quindi digitare le informazioni verranno perse .
Prova t o ridurre la quantità di codice di pulizia necessaria utilizzando puntatori intelligenti, classi di contenitori, ecc. Idealmente non dovrebbe esserci alcun codice di pulizia. – user763305
Sembra che ciò che si vuole fare è semplicemente 'provare {/ * può lanciare * /} catch (const_e_specifica_specifica specifica) {/ * termina * /}'. Se non ti interessa i tipi di eccezione 'Exception1',' Exception2' e così via, quindi * non * li cattura. –
Inoltre, anche se si cattura per riferimento, si dovrebbe * ricominciare usando 'throw;' invece di 'throw e;' per evitare l'affettamento. – ereOn