<分区>
我想通过将其他几个函数相加来创建一个“总计”函数。这可以在编译时完成,所以我认为递归可变函数模板将是一个很好的解决方案。到目前为止我的代码:
int One(){return 1;}
int Two(){return 2;}
int Three(){return 3;}
using func_t = int(void);
//Base case
template <func_t F>
int Total() {
return F();
}
template <func_t F, func_t... Fs>
int Total() {
return F() + Total<Fs...>();
}
int main(int argc, char *argv[])
{
cout << Total<One, Two, Three>() << endl;
return 0;
}
但是,我收到 MSVC 编译器错误 C2668:“总计”:对重载函数的模糊调用;可能是 int Total<int Three(void),>(void)
或 int Total<int Three(void)>(void)
我不明白为什么编译器有两个相似的候选函数模板,唯一的区别是一个多了一个逗号。