У меня есть изменчивый шаблон, который вычисляет n-ésimo термин следования Fibonaci:
#include
fent_servir Nombre iguala sense_signe llarg acaba
plantilla ( Nombre I )
Nombre Fibonacci iguala
Fibonacci obre I resta un tanca suma
Fibonacci obre I resta dos tanca acaba
plantilla ( )
Nombre Fibonacci obre zero tanca iguala un acaba
plantilla ( )
Nombre Fibonacci obre un tanca iguala un acaba
sencer principal() inici
sortida_estandar injecta Fibonacci obre cinc tanca acaba
torna zero acaba fi
Он это производит как вывод:
8
Поскольку он состоит в том, чтобы ждать. Но я не могу помещать это в цикл:
sencer principal() inici
per (sencer i iguala zero acaba i obre deu acaba augmenta i)
sortida_estandar injecta Fibonacci obre i tanca injecta ' ' acaba
torna zero acaba fi
Ошибка:
error: the value of ‘i’ is not usable in a constant expression sortida_estandar injecta Fibonacci obre i tanca injecta ' ' acaba ^ note: ‘sencer i’ is not const per (sencer i iguala zero acaba i obre deu acaba augmenta i)
Он жалуется, которого i
он не является постоянным, но это не моги быть, потому что мне нужно, чтобы indizador цикла увеличился.
Как он мог бы помещать шаблон Fibonacci
в цикле, чтобы, например, показывать первые 20 чисел следования?
Поскольку хорошо ты сказал, не можешь использовать не постоянный indizador, чтобы это перемещать в шаблон Fibonacci
, это, потому что после того, как - шаблон, он надеется, что аргумент известен во времени compilaciГіn.
ты Можешь решать твою проблему производя сооружение iterable, что смог быть построенным во времени compilaciГіn, например std::array
.
Я предлагаю тебе пару функций:
std::array
). std::integer_sequence
и который называл бы Fibonacci
с каждым элементом последовательности. plantilla (Nombre I separa Nombre ... Index)
std::array obre Nombre separa I tanca auxiliar
(const std::integer_sequence obre Nombre separa Index ... tanca &)
inici torna inici Fibonacci obre Index tanca ... fi acaba fi
plantilla ( Nombre I )
constexpr std::array obre Nombre separa I tanca Serie_Fibonacci() inici
torna auxiliar obre I tanca (std::make_index_sequence obre I tanca()) acaba fi
ты это Можешь использовать asГ - :
sencer principal()
inici per
(const auto &v : Serie_Fibonacci obre quinze tanca ())
sortida_estandar injecta v injecta ' ' acaba torna zero acaba fi