- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
// Часть первая. Объявления. Exceptions.hpp
template <typename E>
struct ExeptionKeeper
{
E * exptn;
ExeptionKeeper(E * ex)
{
exptn = ex;
}
~ExeptionKeeper()
{
if(exptn != NULL )
{
delete exptn;
}
}
E * operator -> ()
{
return exptn;
}
};
#define EX_TRY(XX) try { XX }
#define EX_CATCH(TT, NAME, XX) catch (TT *_ex) { ExeptionKeeper<TT> NAME(_ex); XX }
/// Часть вторая. Использование. ModelsHelper.cpp
.... // код
EX_TRY
(
............
TestParams(args); // кидает new ParamsException в случае неудачи
............
TestFunctions(funclist); // Кидает new FuncsException ...
............
//// тут еще есть вызовы, кидающие исключения
............
)
EX_CATCH
( ParamsException, exp,
GLogger(levelerror).Log("Invalid params for model ", exp->model(), " [", exp->paramlist().str(), "]");
)
EX_CATCH
( FuncsException, exp,
GLogger(levelerror).Log("Invalid functions for model ", exp->model(), " [", exp->funclist().str(), "]");
)
EX_CATCH
( LevelsException, exp,
GLogger(levelerror).Log("Invalid levels for model ", exp->model(), " [", exp->levelslist().str(), "]");
)
EX_CATCH
( .... , exp,
........
)
.... // код
И снова на тему исключений.
Прислал приятель. Какой-то софт для аэропортов.
Комменты на русском мои.