Цикл времени компиляции
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 10.01.05 08:39
Оценка:
Как лучше сделать сабж ?
Re: Цикл времени компиляции
От: s_anatoli Украина http://koresha.org/sakhnik
Дата: 10.01.05 08:43
Оценка: 2 (2)
Здравствуйте, achmed, Вы писали:

A>Как лучше сделать сабж ?


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

Жизнь — это чудо! Только вперёд: sakhnik@jabber.kiev.ua
Re: Цикл времени компиляции
От: Glоbus Украина  
Дата: 10.01.05 08:44
Оценка:
Здравствуйте, achmed, Вы писали:

A>Как лучше сделать сабж ?


Например

template<int count>
class Fact
{
public:
enum { val = count * Fact<count-1>::val };
};

template<>
class Fact<0>
{
public:
enum { val = 1 };
};


int main()
{

std::cout << Fact<3>::val << std::endl;
}

Удачи тебе, браток!
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 };
};
Перекуём баги на фичи!
Re[3]: Цикл времени компиляции
От: s_anatoli Украина http://koresha.org/sakhnik
Дата: 10.01.05 09:12
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Беда в том, что у компиляторов есть некая предельная глубина рекурсии в шаблонах.


Если есть возможность преобразовать цикл, то это просто великолепно!
В противном случае действительно приходится насиловать компилятор, ведь глубина рекурсии шаблонов настраивается.

Жизнь — это чудо! Только вперёд: sakhnik@jabber.kiev.ua
Re[3]: Цикл времени компиляции
От: Meer  
Дата: 12.02.05 13:09
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Беда в том, что у компиляторов есть некая предельная глубина рекурсии в шаблонах. Поэтому выполнение цикла...


Для большей точности следует отметить, что использование термина "цикл" в данном контексте не совсем корректно, так как С++ не предоставляет средств, позволяющих реализовать итеративный (не рекурсивный) вариант того или иного алгоритма на этапе компиляции. Цикл и рекурсия — разные понятия, несмотря на то, что во многих случаях могут заменять друг друга (но только не на этапе компиляции программы).
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.