Я пытаюсь отладить мое приложение, используя исключения catch-rethrows. Мой код обработки исключений длиннее, чем некоторые из блоков, которые я отлаживаю, и все они скопированы.Как сделать код исключения DRY?
Есть ли лучший способ повторного выражения приведенного ниже кода? Я подозреваю, что макросы - это путь сюда, но я обычно избегаю макросов, таких как чума.
try {
// Code here...
}
catch (std::exception & e)
{
ErrorMsgLog::Log("Error", "std exception caught in " __func__ " " __FILE__ " " __LINE__, e.what());
throw e;
}
catch (Exception & e)
{
ErrorMsgLog::Log("Error", "Builder exception caught in " __func__ " " __FILE__ " " __LINE__, e.Message);
throw e;
}
catch (...)
{
ErrorMsgLog::Log("Error", "Unknown exception caught in " __func__ " " __FILE__ " " __LINE__);
throw std::runtime_error ("Unknown Exception in " __func__ " " __FILE__ " " __LINE__);
}
'forward' все исключения для шаблона функции? – user2485710
Создайте 'Exception' подтип' std :: exception', как и любой обычный тип исключения. – rightfold
1. Это не C++ 11. Не удается переслать. 2. Исключение - это класс Borland C++ Builder. Кроме того, даже если я * только * обрабатывал std :: exception, я все равно хотел бы уйти от копирования. – QuestionC