Re[2]: Цикл времени компиляции
От: Кодт Россия  
Дата: 10.01.05 09:07
Оценка: 1 (1)
Здравствуйте, s_anatoli, Вы писали:

_>Посмотрите пример пионера метапрограммирования о пузырьковой сортировке.


Беда в том, что у компиляторов есть некая предельная глубина рекурсии в шаблонах. Поэтому выполнение цикла
template<int N> struct sum
{
  enum { value = sum<N-1>::value + N };
};
template<> struct sum<0>
{
  enum { value = 0 };
};

где-то для N=32 даст ошибку.

Так что, длинные циклы требуется разбивать, чтобы глубина рекурсии была, скажем, логарифмической
template<int N, int L> struct sum2
{
  enum { value = sum2<N,L/2>::value + sum2<N+L/2,L-L/2>::value };
};
template<int N> struct sum2<N,0>
{
  enum { value = 0 };
};
template<int N> struct sum2<N,1>
{
  enum { value = N };
};

template<int N> struct sum
{
  enum { value = sum<1,N>::value };
};
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.