Использовать изменчивый шаблон с целым числом как параметром не-типом в цикле

У меня есть изменчивый шаблон, который вычисляет n-ésimo термин следования Fibonaci:

#include <iostream>

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 чисел следования?

0
задан 28.12.2019, 12:26
1 ответ

Поскольку хорошо ты сказал, не можешь использовать не постоянный indizador, чтобы это перемещать в шаблон Fibonacci, это, потому что после того, как - шаблон, он надеется, что аргумент известен во времени compilaciГіn.

ты Можешь решать твою проблему производя сооружение iterable, что смог быть построенным во времени compilaciГіn, например std::array.

Я предлагаю тебе пару функций:

  1. Одна funciГіn, который он получил до тех пор, пока Г-ndice ты не хочешь ее sucesiГіn (и servirГЎ, чтобы считать tamaГ±o std::array).
  2. Одна funciГіn помощник, который создавал бы один 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
1
ответ дан 29.12.2019, 09:10

Теги

Похожие вопросы