C ++元编程递归步长限制

时间:2013-10-14 15:54:12

标签: c++ algorithm recursion template-meta-programming

我正在给模板元编程一个去。这是我想出的一个简单例子:

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;编译器抱怨代码太复杂了。这个限制似乎相当随意,有没有办法修改它?

1 个答案:

答案 0 :(得分:2)

原始递归仅终止于模板参数n的偶数值。您需要两个停止案例,对于n == 0和n == 1.在修改后的示例中,您需要3个停止案例,或n&lt; = 0的停止案例。