Как не писать повторяющийся код в блоках catch?

Я использую QT 4.8 (C++ )для проекта настольного приложения и пишу обработку исключений, которая выглядит следующим образом:

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;
  }
}

Итак, мой вопрос нужно ли мне писать код очистки -в каждом блоке catch ? Можно ли как-нибудь избежать написания повторяющегося кода ?

ПРИМЕЧАНИЕ ::[ В методе 1()] Я хочу повторно -генерировать исключения, которые произошли моему вызывающему абоненту. Поэтому я не могу поймать их в одном блоке catch, потому что тогда информация о типе будет потеряна.

6
задан EngineeredBrain 21 April 2012 в 06:40
поделиться