C++17对可变长模板参数引入了折叠表达式,以简化对参数包的处理,也可以避免递归调用。
C++17前如果想实现一个可变长参数相加,需要这样实现:
#include <iostream>
using namespace std;
template<class T>
auto add(T t)
{
return t;
}
template<class T, class ...Args>
auto add(T t, Args... args)
{
return t + add(args...); //通过递归调用实现
}
int main()
{
cout<<add(1)<<endl; //输出:1
cout<<add(1, 2)<<endl; //输出:3
cout<<add(1, 2, 3)<<endl; //输出:6
cout<<add(1, 2, 3, 4)<<endl; //输出:10
return 0;
}
C++17的折叠表达式可以简化实现的方式:
#include <iostream>
using namespace std;
template <class ... Ts>
auto add(Ts ... ts)
{
return (... + ts); //折叠表达式
}
int main()
{
cout<<add(1)<<endl; //输出:1
cout<<ad