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

4

1 回答 1

2

Your original recursion only terminates for even values of the template parameter n. You need two stop cases, for n == 0 and n == 1. In your revised example, you'd need 3 stop cases, or a stop case for n <= 0.

于 2013-10-14T16:26:22.120 回答