C++ c++;带递归的模板实现循环

C++ c++;带递归的模板实现循环,c++,templates,recursion,C++,Templates,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&

我试图用递归编写一个元函数。输入是可变整数,输出应该是输入的总和

我的代码如下:

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;
}
模板
constexpr size\u t累计=curInput+累计;
//模板专门化
模板
constexpr size\u t累计=0;
int main(int argc,char*argv[]){
constexpr size\u t res1=累加;
constexpr size\u t res2=累加;
返回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;
}
#包括
模板
constexpr size\u t累计=curInput+累计;
//模板专门化
模板
constexpr size\u t累计=curInput;
int main(int argc,char*argv[]){
constexpr size\u t res1=累加;
constexpr size\u t res2=累加;

std::cout在C++17中,没有递归:
模板constexpr std::size\u t Accumulate=(0+…+输入);