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

    +53

    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
    18. 18
    19. 19
    20. 20
    template <typename T, typename Mid, int N>
    	struct UselessWrapperFillMid
    	{
    		inline static void FillMid (T* t, Mid mid)
    		{
    			mid(t[0], t[N], t[N/2]);
    			UselessWrapperFillMid<T,Mid,N/2>::FillMid (&t[0]  , mid);
    			UselessWrapperFillMid<T,Mid,N/2>::FillMid (&t[N/2], mid);
    		}
    	};
    	
    	template <typename T, typename Mid> 
    	struct UselessWrapperFillMid <T, Mid, 1>
    	{
    		inline static void FillMid (T* t, Mid mid)
    		{
    			(void)t;
    			(void)mid;
    		}
    	};

    Бесит такой понос вместо нормальной рекурсии.
    Но иначе оно не развернётся в последовательность инструкций без ветвлений и вызовов.

    Запостил: TarasB, 16 Октября 2014

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

    • А ещё, как вы видите, меня пиздец как заебало придумывать названия для этого дерьма.
      А всё потому, что ёбаные кресты не могут в специализацию шаблонных функций, это работает только для структур.
      Ответить
    • Поставь уже компилятор, поддерживающий c++1... Там хоть и паршивый, но constexpr для вычислений в компилтайме.

      P.S. А че этот код делает? Судя по всему у него ни результата, ни побочных эффектов нет.
      Ответить
      • Ааа, побочный эффект таится в mid...
        Ответить
      • он интерполирует массив длиной N, где N - степень двойки
        если во втором шаблоне прописать N-N/2 вместо N, то он не только степени двойки сможет нормально принять
        Ответить
        • особенность такой интерполяции в том, что для питушни из многих компонент не надо делать покомпонентные операции, достаточно только операции усреднения

          например, среднее двух цветов формата R8G8B8 - это
          (l&r) + ((l^r) & 0xfefefe)>>1;


          честная интерполяция требует разбирать цвет на компоненты, искать вещественное приращение каждой и отдельно приращивать каждую компоненту, короч питух анскилльный
          Ответить
          • интерполеции тербет рабирать цвет на копонеции, ищем ростовку вещесенное приращение приращение каждой и отдельно приращивать каждую копоненту, короч питух анскилльный
            вижходит среднее цевтов R8G8B8 - это цыфры 0xfe 1 15 83 Mid N/2
            такой инторполеции в том, что для питушни из многих копонент не надо длать покопонеции, достаточно токо опереции усерднения
            Ответить
            • Это ж не генератор
              Ответить
              • Перефразируя классика: "если собрать вместе десять самых умных людей и попросить их придумать самую глупую вещь на свете, то им не удастся придумать ничего более тупого, чем вореции."
                Ответить
          • А альфа-канал мешать не будем что ли?
            Ответить
          • показать все, что скрыто-
            Ответить
        • Я знал, что ВарецийБ поехал на подсчетах времени компиляции, но чтобы на столько...
          Хватит уже всё считать во время компиляции. Посчитайте во время инициализации приложения.
          Ответить
          • Осталось найти его посты прошлых лет где он обсирает КРЕСТОШАБЛОНЫ иТУПЫХ КРЕСТОБЛЯДЕЙ.
            Ответить
          • http://govnokod.ru/7097#comment94306
            Вот-вот-вот. Угощайтесь
            Мда, печально наблюдать, как крестобляди дрочат на это бесполезное решение, которое по своей практической полезности сравнимо только с умением какать вверх ногами.
            Уже давно компиляторы научились считать константы при компиляции, а крестобляди по прежнему дрочат на шаблоны, которые никто, кроме них, прочитать не сможет (ну или сможет, только хорошенько курнув).
            Очень жаль, что мои мысли, которые я пытался тут высказать, потонули в крестоблядском кукареканьи о "нестандартном мышлении" и "отличном решении".

            [...]У шаблонного варианта нет вообще никакого оправдания. Он по всем параметрам хуже нормального решения. И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.

            Ответить
            • все в молодости совершали ошибки

              3.5 минуты на поиск ереси
              гугл нервно курит в сторонке
              Ответить
              • Да, только ламер опять не подумал, а остальные не проверили.
                Ответить
                • У меня нет Cfront'а под рукой, чтобы перевести это всё на понятный язык.
                  Ответить
                  • этот шаблон для N=8 генерирует такую последовательность:
                    mid(t[0], t[8], t[4]);
                    mid(t[0], t[4], t[2]);
                    mid(t[0], t[2], t[1]);
                    mid(t[2], t[4], t[3]);
                    mid(t[4], t[8], t[6]);
                    mid(t[4], t[6], t[5]);
                    mid(t[6], t[8], t[7]);
                    , а ламер опять глючит.

                    mid пишет в третий параметр полусумму между первым и вторым

                    Я хотел попробовать разные N, поэтому вместо хардкода запилил шаблон.

                    Обычная рекурсия не оптимизируется. То есть второй вызов превращается в возврат на начало, но первый вызов остаётся вызовом и проверка if(N=1) при простой рекурсии никуда не девается.
                    Ответить
          • Где ты тут видишь подсчёты времени компиляции?
            Ответить
      • >Поставь уже компилятор, поддерживающий c++1...
        Ты что??? Какой еще c++1.?
        Тарас перейдет на c++1... не раньше чем появится c++2... Старый стандарт программы не испортит.
        Ответить
      • показать все, что скрыто-
        Ответить
      • показать все, что скрыто-
        Ответить
    • показать все, что скрытоДАВАЙТЕ ФЛУДИТЬ И ТРОЛЛИТЬ! ;)
      Ответить

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