На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> _maxa, _mina , Шаблоны в С++
    Мне уже давно не нравилось то, что в выражениях типа:
    ExpandedWrap disabled
      if ( max < a ) max = a;

    приходится писать max и a по два раза. Хорошо, если имена короткие, а то бывает и такое:
    ExpandedWrap disabled
      if ( tralalatralala < trapapatrapapa ) tralalatralala = trapapatrapapa;

    А вот где-то два года назад я сделал такие шаблоны:
    ExpandedWrap disabled
      template<class T> inline bool _mina ( T & i1, const T & i2 )
      {
          return i1 > i2 ? i1 = i2, true : false;
      }
       
      template<class T> inline bool _maxa ( T & i1, const T & i2 )
      {
          return i1 < i2 ? i1 = i2, true : false;
      }

    Теперь пишу так:
    ExpandedWrap disabled
      // Раньше
      if ( max < a ) max = a;
      // Теперь
      _maxa ( max, a );
      // Раньше
      if ( max < a ) max = a, im = i;
      // Теперь
      if ( _maxa ( max, a ) ) im = i;

    Кроме того можно использовать выражения. Например:
    ExpandedWrap disabled
      if ( _maxa ( max, sin ( a + b ) / c ) ) im = i;

    Я пишу на С++, но подобные вещи можно сделать и в других языках, где есть шаблоны.
    Сообщение отредактировано: prografix -
      А если надо бОльшее из значений положить в третью переменную? Ещё одну шаблонину будешь делать? А если надо выбрать бОльшее из трёх переменных? А если по абсолютному значению? Утонешь ты там в своих шаблонах. А заодно никто, кроме тебя, не сможет полученный код нормально сопровождать.

      Цитата prografix @
      подобные вещи можно сделать и в других языках, где есть шаблоны.

      В SQL вот никаких шаблонов и в помине нет. Но во многих диалектах есть функции GREATEST/LEAST. А написать явно, куда присваивать результат - несложно, рук не оборвёт.
        У этой темы сейчас почти 200 просмотров. Интересно, кто-нибудь воспользовался этими шаблонами?
          Цитата prografix @
          У этой темы сейчас почти 200 просмотров. Интересно, кто-нибудь воспользовался этими шаблонами?

          Честно говоря, без обид тока - такого в коде видеть не хочется! Усложнение чтения кода просто на пустом месте, чисто мое ИМХО.
          Я понимаю, когда сложную логику закидывают "под капот". Там это действительно оправдано.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0271 ]   [ 15 queries used ]   [ Generated: 7.10.24, 17:45 GMT ]