可变参数和折叠表达式

可变参数和折叠表达式

1.sizeof…获取参数数量

template<typename ...Args>
int count(const Args&... args)
{
return sizeof...(args);
}

2.使用可变参数构造tuple

template<typename ...Args>
auto make_tuple(const Args&...args)
{
return std::make_tuple(args...);
}

3.使用可变参数构造数组

template<typename ...Args>
auto make_array(const Args&...args)
{
return std::array{args...};
}

4.使用折叠表达式代替递归模板

#include <iostream>
#include <string>
//第一种实现
template<typename T>
T sum1()
{
return T{};
}

template<typename T,typename First,typename ...Args>
T sum1(First&& first,Args&& ...args)
{
return first + sum1<T>(args...);
}

//第二种实现
template<typename T,typename...Args>
T sum2(Args&&...args)
{
T s{};
((s += args), ...);
return s;
}

int main()
{
std::cout << sum1<double>(1, 2, 3, 4.5) << std::endl;
std::cout << sum2<double>(1, 2, 3, 4.5) << std::endl;
std::cout << sum1<std::string>("hello", " ", "world");
}