C++ 模板使用递归实现循环
c++ template implement loop with recursion
我正在尝试编写一个带有递归的元函数。输入是可变参数整数,输出应该是输入的总和。
我的代码如下:
template <size_t curInput, size_t...Inputs>
constexpr size_t Accumulate = curInput + Accumulate<Inputs...>;
// template specialization
template <size_t...Inputs>
constexpr size_t Accumulate<Inputs> = 0;
int main(int argc, char *argv[]) {
constexpr size_t res1 = Accumulate<1>;
constexpr size_t res2 = Accumulate<1, 2, 3, 4, 5>;
return 0;
}
在main()
中进行测试时,res1
为 0,res2
为 10。似乎将最后一个整数视为 0,我不明白为什么会这样。我想知道如何修改它。
任何回复将不胜感激!
递归模板至少需要一个参数,然后拔掉第一个参数,然后递归。因此,您的专用化应该适用于只有一个模板参数的情况:即基本情况。
#include <iostream>
template <size_t curInput, size_t...Inputs>
constexpr size_t Accumulate = curInput + Accumulate<Inputs...>;
// template specialization
template <size_t curInput>
constexpr size_t Accumulate<curInput> = curInput;
int main(int argc, char *argv[]) {
constexpr size_t res1 = Accumulate<1>;
constexpr size_t res2 = Accumulate<1, 2, 3, 4, 5>;
std::cout << res1 << " " << res2 << std::endl;
return 0;
}
相关文章:
- 如何在BST的这个简单递归实现中消除警告
- 使用非递归插入方法实现 AVL 树
- C++ 模板使用递归实现循环
- 了解使用堆栈实现队列的递归调用机制
- 在int main()[c++]中实现一个递归函数
- 链表中的递归长度函数实现
- 递归合并排序算法实现
- 我如何实现递归函数的模板,该模板允许C 中的许多不确定数据类型的参数
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 在C++中树的递归实现中少出现1个节点
- 使用递归实现 pow(A, B) % C,其中 A、B 和 C 是正整数
- C++11 递归自旋锁实现
- 在 Matlab 中非递归实现 perms,与 Coder 兼容
- 使用递归函数实现 neper 数 (e)
- GOF复合设计模式CompositeObject::删除C++中的递归实现
- (C++)无递归实现指数函数计算器
- 归并排序递归实现的部分理解
- 迭代方法似乎比递归实现(硬币更换)慢
- 用堆栈而不是递归实现Lisp-eval