1. C++ / Говнокод #3719

    +153

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #define DOISA(x,p,y)              \
    ClassID x::isA() const{return y;} \
    MYBoolean x::isA(ClassID i) const \
    {                                 \
    	return (i == x::isA() ? TRUE : p::isA(i)); \
    }

    Ядро большого проекта. Имеется довольно большая иерархия наследуемых классов с виртуальными методами isA(). Все эти методы зачем-то сворачиваются в этот макрос.

    Запостил: DarthBobr, 16 Июля 2010

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

    • isA - хорошее название для часто используемого метода...
      И прятать классы в макросы - косчунство. Потом их соседи по проекту наверное долго искали... :D
      Ответить
    • Кстати, что эта дося делает? Вроде рекурсия какая-то...
      Ответить
      • Определяет имя класса объекта, перебирая всю цепочку наследований.
        Ответить
        • Самописный typeid? Добре проээкт. Не хватает ещё чёрногожеки и шлюх.
          Ответить
    • похоже код делался во времена когда RTTI еще не была стандартизирована и typeid() через раз работал. или из-за каких-то внешних проблем (например компилер кривой) стандартный RTTI не фунциклит.

      > ClassID x::isA() const{return y;}

      или поддерживается альтернативный граф "что есть что" - иначе бы return параметризировать не надо было.
      Ответить
      • Ну это лишь предположение.
        Ответить
        • я как бы не пытаюсь говновость этого кода унизить...... бо как по мне излишняя зависимость от RTTI как и переизобретения полиморфизма есть говно.
          Ответить
          • Переизобретение велосипеда - есть говно. А самое страшное изобретение велосипеда - это переизобретение велосипеда, уже встроенного в компилятор. О_о
            Ответить
            • А если мотороллер хуёвый, глючный и дорогой?
              Ответить
              • ну что, никто не знает что делать, если мотороллер хуёвый, глючный и дорогой?
                Ответить
    • какая рефлексия )))
      Ответить

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