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

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

Комментарии (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)
        Ответить
        • Это всем лучше. Представь, что копирование для класса - дорогая операция, и сравни варианты.
          Ответить
          • Ну ссылки ещё, да.
            Я про то, что зачем тут стддвоеточиедвоеточиемакс?
            Ответить
            • Потому что лучше юзать стандартные решения, если они есть.
              Ответить
              • Только почему-то эти стандартные решения зачастую работают по-разному в зависимости от компилятора и пр.
                И как ни крути, почти каждый проект на с++ полон самописными велосипедами чуть менее чем полностью.
                Ответить
                • Потому что стандарт не регламентирует внутреннюю реализацию тех или иных методов, а обеспечивает совместимый интерфейс. Чтобы и переход на другие компиляторы был упрощен, и возможность быстрее разобраться в коде новым людям обеспечена. А велосипеды в большинстве своем не от большого ума в проектах появляются.
                  Ответить
  • как вам такой вариант?

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

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

Помни, guest, за тобой могут следить!

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


    8