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

    +168

    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
    14. 14
    15. 15
    16. 16
    17. 17
    template <typename T> T min3 (T v1, T v2, T v3) {
      T min = v1;
      if (min > v2)
        min = v2;
      if (min > v3)
        min = v3;
      return min;
    };
    
    template <typename T> T max3 (T v1, T v2, T v3) {
      T max = v1;
      if (max < v2)
        max = v2;
      if (max < v3)
        max = v3;
      return max;
    };

    Как говорится - главное, чтоб работало.

    Запостил: panter_dsd, 04 Апреля 2011

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

    • А как правильно?
      Ответить
      • Ога. Ну, как минимум так:
        template <class T>
        const T& max3 (const T& first, const T& second, const T& third)
        {
        return std::max (first, std::max (second, second));
        }

        template <class T>
        const T& min3 (const T& first, const T& second, const T& third)
        {
        return std::min (first, std::min (second, second));
        }
        Ответить
        • Главное не очепятаться :)
          std::max (second, second)
          std::min (second, second)
          Ответить
        • А из четырех, десяти, 100500 ?
          Ответить
          • Это уже с использованием контейнера.
            Ответить
            • А на крестошаблонах можно описать максимум для неизвестного на этапе компиляции числа параметров?
              Ответить
              • Нельзя. И не нужно.
                Ответить
                • И кто-то мне будет доказывать про их крутизну, хахаха....
                  Ответить
                  • Зачем доказывать очевидные вещи :)
                    Ответить
                    • Как обезьяне доказать пользу очков?
                      а уж часы вообще говно.
                      Ответить
                      • > Как обезьяне доказать пользу очков?
                        можно нюхать, лизать, на хвост нанизать
                        незаменимый гаджет же!
                        Ответить
              • Передаешь массив и делов-то.
                Ответить
          • Юзать T4-Editor :)
            Ответить
        • И чем это лучше?
          Ответить
          • Это всем лучше. Представь, что копирование для класса - дорогая операция, и сравни варианты.
            Ответить
            • тьфу. то есть вызовы функций вместо сравниваний?
              Ответить
            • Ну ссылки ещё, да.
              Я про то, что зачем тут стддвоеточиедвоеточиемакс?
              Ответить
              • Потому что лучше юзать стандартные решения, если они есть.
                Ответить
                • показать все, что скрытоТолько почему-то эти стандартные решения зачастую работают по-разному в зависимости от компилятора и пр.
                  И как ни крути, почти каждый проект на с++ полон самописными велосипедами чуть менее чем полностью.
                  Ответить
                  • Потому что стандарт не регламентирует внутреннюю реализацию тех или иных методов, а обеспечивает совместимый интерфейс. Чтобы и переход на другие компиляторы был упрощен, и возможность быстрее разобраться в коде новым людям обеспечена. А велосипеды в большинстве своем не от большого ума в проектах появляются.
                    Ответить
    • как вам такой вариант?

      template <typename RetT> RetT MaxTemplate() { return (RetT)0; }

      template <typename RetT, typename ArgT, typename ... Args> RetT MaxTemplate(ArgT Arg1, Args ... args)
      { RetT Temp = MaxTemplate<RetT>(args ...); return ((RetT)Arg1 > Temp) ? ((RetT)Arg1) : (Temp); }

      стандарт C++0x...
      Ответить
      • синоптические конструкции в С++0х ?
        Ответить
        • рекурсивный шаблон с переменным числом параметров) одна из самых клевых фишек C++0x на мой взгляд)
          Ответить
    • а че функция называется min3, что перегрузку по количеству аргуменов отменили?
      или так понятнее min1, min2 min3 min4 - версионность на уровне функций)))
      Ответить

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