C++ 模板使用递归实现循环

c++ template implement loop with recursion

本文关键字:递归 实现 循环 C++      更新时间:2023-10-16

我正在尝试编写一个带有递归的元函数。输入是可变参数整数,输出应该是输入的总和。

我的代码如下:

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;
}