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

C++ metaprogramming recursive step limit

本文关键字:递归 编程 C++      更新时间:2023-10-16

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

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 的停止案例。