C++元编程递归步长限制
C++ metaprogramming recursive step limit
我正在尝试模板元编程。这是我想出的一个简单例子:
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 的停止案例。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 如何使用 Boost Hana 删除元编程递归
- 使用元编程递归初始化 std::array
- 递归模板参数包编程
- 使用递归编程布尔计划
- 双递归动态编程
- 使用递归编程的树
- 模板元编程递归上限
- 元编程和SFINAE/std::enable_if:无限模板递归
- C++元编程递归步长限制
- 递归解决方案的动态编程解决方案
- 模板元编程:原始递归
- 如何在c++中编写元编程模板的最后递归
- 在TBB中使用递归、基于任务的并行编程获得不同的输出
- 形成递归函数C++编程
- 模板元编程的尾递归性能