我正在给模板元编程一个去。这是我想出的一个简单例子:
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;
编译器抱怨代码太复杂了。这个限制似乎相当随意,有没有办法修改它?
答案 0 :(得分:2)
原始递归仅终止于模板参数n的偶数值。您需要两个停止案例,对于n == 0和n == 1.在修改后的示例中,您需要3个停止案例,或n&lt; = 0的停止案例。