- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 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;
}
};
Бесит такой понос вместо нормальной рекурсии.
Но иначе оно не развернётся в последовательность инструкций без ветвлений и вызовов.
А всё потому, что ёбаные кресты не могут в специализацию шаблонных функций, это работает только для структур.
спрячь дерьмо в namespace detail {} и обзови его, как обозвал функцию подсчета этого дерьма
заодно кококомпилятор будет выводить дерьмо аргументов функции
P.S. Стало любопытно: это код генерации фракталов? прочитал.
* xkcd#297
P.S. А че этот код делает? Судя по всему у него ни результата, ни побочных эффектов нет.
если во втором шаблоне прописать N-N/2 вместо N, то он не только степени двойки сможет нормально принять
например, среднее двух цветов формата R8G8B8 - это
честная интерполяция требует разбирать цвет на компоненты, искать вещественное приращение каждой и отдельно приращивать каждую компоненту, короч питух анскилльный
вижходит среднее цевтов R8G8B8 - это цыфры 0xfe 1 15 83 Mid N/2
такой инторполеции в том, что для питушни из многих копонент не надо длать покопонеции, достаточно токо опереции усерднения
Хватит уже всё считать во время компиляции. Посчитайте во время инициализации приложения.
Вот-вот-вот. Угощайтесь
Мда, печально наблюдать, как крестобляди дрочат на это бесполезное решение, которое по своей практической полезности сравнимо только с умением какать вверх ногами.
Уже давно компиляторы научились считать константы при компиляции, а крестобляди по прежнему дрочат на шаблоны, которые никто, кроме них, прочитать не сможет (ну или сможет, только хорошенько курнув).
Очень жаль, что мои мысли, которые я пытался тут высказать, потонули в крестоблядском кукареканьи о "нестандартном мышлении" и "отличном решении".
[...]У шаблонного варианта нет вообще никакого оправдания. Он по всем параметрам хуже нормального решения. И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.
3.5 минуты на поиск ереси
гугл нервно курит в сторонке
, а ламер опять глючит.
mid пишет в третий параметр полусумму между первым и вторым
Я хотел попробовать разные N, поэтому вместо хардкода запилил шаблон.
Обычная рекурсия не оптимизируется. То есть второй вызов превращается в возврат на начало, но первый вызов остаётся вызовом и проверка if(N=1) при простой рекурсии никуда не девается.
Ты что??? Какой еще c++1.?
Тарас перейдет на c++1... не раньше чем появится c++2... Старый стандарт программы не испортит.