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

    +12

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    template <class ToPtr,class From>
    ToPtr DynamicCast (From f)
    {
      // static check if *ToPtr is derived from f
      (void)sizeof (static_cast<From> ((ToPtr)NULL));
      // lazy precalculation
      static bool castable = dynamic_cast<ToPtr> (f)!=NULL;
      static int offset =
        int ((char *)dynamic_cast<ToPtr> (f)-(char *)f);
      return castable? (ToPtr)((char *)f+offset) : NULL;
    }
    
    // usage: TBase *ptr1 = ...; TDerived *ptr2 = DynamicCast<TDerived *> (ptr1);

    Performance oriented dynamic_cast

    Запостил: Artur, 11 Июня 2013

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

    • О_о. Отличный генератор UB'ов и гейзенбагов...
      TBase *ptr1 = new TDerived();
      TBase *ptr2 = new TOtherDerived();
      
      TDerived *p1 = DynamicCast<TDerived*>(ptr1); // кешируем оффсет...
      TDerived *p2 = DynamicCast<TDerived*>(ptr2); // ...кровь-кишки-распидорасило
      Ответить
    • поймал себя на том, что уже перестал понимать сишко\крестовый код.
      деградировал, ленюсь - или он на самом деле столь страшен и нечитаем?
      Ответить
      • Требует немало пунктов мозгосилы. Ну и код нормально не все умеют писать.
        Ответить
        • обилие всяких крючочков вообще отбивает желание разбираться.
          решетчатый и жабий код читаются влет.
          Ответить
          • всему виной отступ в 2 пробела!
            Ответить
            • Угу. Виной всему овсяное печенье.
              Ответить
            • эм, на жабе\пыхе тоже настроил таб на 2 символа, но это не мешает.
              как-то раньше был за лаконичность, чтобы знаками экономить ключевые слова. а вот теперь смотрю, что всякие <> ? :: * здорово затрудняют читаемость, беглый взгляд не позволяет уцепить смысл кода.
              Ответить
              • мне западло на неудобном айпаде набирать колор грин

                не страшно, если кто то не умеет писать или читать крестокод, главное, чтобы человек был хороший
                Ответить

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