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

    +147

    1. 1
    https://ideone.com/xM1uqd

    Запостил: Bobik, 29 Апреля 2015

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

    • И что это?
      Ответить
    • Крутейшие шаблоны, и, по-прежнему, пятиэтажные макросы. Как можно так жить?
      Ответить
    • Имхо, проще через typeid сделать. Один фиг для отладки же?

      P.S. Там правда RTTI должно быть включено и кокомпиляторозависимый костыль для гцц строчек на 5 придётся написать.
      Ответить
    • Смотрю и плачу. Просто добавить в этот ёбаный язык возможность обращаться к информации о типе как к константе времени компиляции - и код становится простой и понятный. Но нет, нести свой крест не должно быть слишком легко.
      Ответить
      • > возможность обращаться к информации о типе как к константе времени компиляции
        Возможность обращаться то добавили (typeid()), вот только информации там кот наплакал.
        Ответить
        • То есть нельзя узнать, является ли тип функцией, и если да, то какие у неё аргументы и тип возвращаемого значения?
          То есть нельзя узнать, является ли тип структурой, и если да, то какие у неё есть поля и методы и базы и какие у них модификаторы доступа?
          Ну какого хуя?
          Ответить
        • >>typeid()

          и выдает он номерок, по которому можно узнать только одного ли типа 2 хреновины?
          типа
          if(typeid(хрень) == typeid(другаяХрень))...
          ?
          Ответить
          • Там еще typeid(хрень).name() можно посмотреть. Но в gcc оно страшное, и надо вызывать функцию, которая его расшифрует.
            Ответить
            • А из по этому имени можно с рефлексией поиграться или это просто бонус для отладки?
              Ответить
          • > if(typeid(хрень) == typeid(другаяХрень))...
            Так можно только в рамках одного модуля. Надо по rtti.name() компарить
            Ответить
            • Что имеется в виду под модулем (dll, юнит трансляции и т.п.)? А то в кресты модули пока не завезли...
              Ответить
              • so dll и иже с ними. Говорят с единицами трансляции тоже бывают казусы
                Ответить
                • > Visual Studio (C++) apparently does a string compare when you call dynamic_cast, to handle edge cases of inheriting across assembly boundaries. This makes an operation that wasn't all that fast to begin with excruciatingly slow.
                  В жсс теже грабли
                  Ответить
                  • И да, я перепутал. Наверное...
                    Как минимум низя так:
                    &typeid(хрень) == &typeid(другаяХрень)

                    > I did find that mingw32-gcc obeys the Windows C++ ABI, where std::type_info objects aren't unique for a type across DLLs; typeid(a) == typeid(b) calls strcmp under the covers.
                    Ответить
        • > информации там кот наплакал

          Ну сколько смог...
          Ответить
    • хай блэк тринитрон!
      Ответить

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