Я даю шаблон метапрограммирования. Вот простой пример, который я придумал:
template <int n>
struct N
{
static const int k = N<n-2>::k;
};
template<>
struct N<0>
{
static const int k = 0;
};
int main(int, char *[])
{
}
Вышеупомянутые работы. Заметим, что k определяется как k = N<n-2>::k;
Не удалось выполнить следующее:
template <int n>
struct N
{
static const int k = N<n-3>::k;
};
template<>
struct N<0>
{
static const int k = 0;
};
int main(int, char *[])
{
cout << N<10>::k;
getchar();
}
Тот же код, кроме k = N<n-3>:k;
Компилятор жалуется на слишком сложный код. Этот предел кажется довольно произвольным, есть ли способ его изменить?
Исходная рекурсия заканчивается только для четных значений параметра шаблона n. Вам нужны два случая остановки, для n == 0 и n == 1. В вашем пересмотренном примере вам понадобятся 3 случая остановки или случай остановки для n <= 0.