демонстрирует реализацию цикл
Автор admin
Пятница, 22 мая 2009 11:32
демонстрирует реализацию циклов: вы пишете рекурсивный шаблон и определяете критерий остановки посредством специализации. Следующий пример показывает, как аналогичным способом на стадии компиляции вычисляется последовательность чисел Фибоначчи: //: С05:Fibonacci.срр #include using namespace std: tempiate struct Fib { enum {val = Fib::val + Fib::val}: }: tempiate<> struct Fib { enum {val =1}: }; template<> struct Fib<0> { enum {val =0}: }: int mainO { cout « Fib<5>::val « endl: // 6 cout « Fib<20>::val « endl: // 6765 } ///:- На языке математики числа Фибоначчи определяются так: 0, п = О, 1, п = 1, /Я-2+/я-2.Я>1- Первые два правила оформляются как специализации, а третье правило преобразуется в основной шаблон. Циклы на стадии компиляции Чтобы выполнить любой цикл в шаблонной метапрограмме, необходимо сначала сформулировать его в рекурсивном виде. Например, для возведения целого числа п в степень р в обычной программе применяется цикл вида: int val = 1: while(p–) val *- П; Вместо этого цикла можно воспользоваться рекурсивной процедурой: int power(int n. int р) { retu
Комментарии закрыты.
Последние комментарии