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

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
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 Artur, (Updated )

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

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

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

Семь раз отмерь — один отрежь, guest!

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


    8