C ++ метапрограммирование рекурсивный предел шага

0

Я даю шаблон метапрограммирования. Вот простой пример, который я придумал:

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; Компилятор жалуется на слишком сложный код. Этот предел кажется довольно произвольным, есть ли способ его изменить?

Теги:
algorithm
recursion
template-meta-programming

1 ответ

2
Лучший ответ

Исходная рекурсия заканчивается только для четных значений параметра шаблона n. Вам нужны два случая остановки, для n == 0 и n == 1. В вашем пересмотренном примере вам понадобятся 3 случая остановки или случай остановки для n <= 0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню