Кресты / Говнокод #5599 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 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,
            ........
        )
.... // код

И снова на тему исключений.
Прислал приятель. Какой-то софт для аэропортов.
Комменты на русском мои.

Запостил: ossa ossa, (Updated )

Комментарии (6) RSS

  • Ну что тут можно сказать... Говнокодом является бросание исключений в стиле `throw new`, т.е. бросение непосредственно динамически аллоцированных объектов. А все остальное - это лишь извращения, которые волей-неволей приходится применять тогда, когда кто-то таки бросает исключения в стиле `throw new`.

    Поэтому то, что Вы привели тут - это само по себе еще никак не говнокод. Есть к чему придраться, конечно, но это не корень проблемы. Корень проблемы - это тот говнокодер, который кидает `throw new`. Если за `throw new` ответственен другой "аффтар", то на этот код вы наезжаете во многом зря. Автор этого кода - лиштьневинная жертва, которая лишь "вертится как умеет".
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8