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

    +23

    1. 1
    QHash<QByteArray, QSharedPointer<KeywordAnalyzerResult::Statistics> >::const_iterator i = res.result()->constBegin();

    Создание STL-style итератора для Qt-ных контейнеров обычно выглядит уродски.

    Запостил: viktorious, 10 Августа 2012

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

    • typedef? auto? не, не слышал
      Ответить
    • И без Qt такую гадость можно написать, но есть же typedef ;)
      Ответить
    • [TarasBMode]собственно в этом одно из уродств крестов и есть[/TarasBMode]
      Ответить
      • Второе уродство заключается в "> >" с обязательным пробелом... Хорошо хоть в с++11 пофиксили эту неприятность.
        Ответить
        • Добавив при этом дополнительный костыль в парсер. Впрочем, их там и так уже должно быть не мало.
          Ответить
        • Да это и не то чтобы 'уродство'. В принципе, если действительно сложный шаблон, то даже удобнее отделять параметры, которые сами шаблоны, пробелами, чтобы в макаронину не превращалось.
          А дальше typedef.
          И, по существу, это пофиксенье никому не нужно. Однако, действительно логично, чтобы именно угловые скобки, а не операторы имели более высокий приоритет, как круглые скобки.
          Ответить
          • > то даже удобнее отделять параметры, которые сами шаблоны, пробелами

            От чего отделять? Это тоже самое, что заставлять в выражениях писать две закрывающих скобки через пробел:
            ((1+2)*(3+4) )
            . Пробел в этом месте (после последнего параметра шаблона) никому (кроме, конечно, парсера с++) нафиг не сдался.
            Ответить
            • показать все, что скрыто(<пробел>(1+2)*(3+4)<пробел>)
              Обратите внимание, как оно написано выше в коде.

              Учитесь читать чужие сообщения.
              Ответить
              • В коде выше написано:
                QHash<QByteArray, QSharedPointer<KeywordAnalyzerResult::St atistics>[пробел]>
                а не
                QHash<[пробел]QByteArray, QSharedPointer<KeywordAnalyzerResult::St atistics>[пробел]>

                Поэтому я и привел пример как ((1+2)*(3+4)[пробел])). Учитесь читать.

                P.S. А пробел после открывающей скобки не имеет особого смысла. Да и в письменной речи не принятно ставить его.
                Ответить
      • Вы что Тараса живого никогда не видели?
        Надо так:
        TarasBMode := on
        {Крестоблядство!}
        {ОП-хуй}
        TarasBMode := off
        Ответить

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