#include<iostream>
//c++17写法,折叠表达式
template<typename...args>
auto sum(args&&...types)
{
//一元右折
//return (types + ...);
//一元左折
//return (...+types);
//二元左折
//return(0 + ... + types);
//二元右折 (这里元,代表两个入职参数)
return (types+...+0);
}
//c++17之前写法 //递归栈
template<typename T>
T sum(T value)
{
T sum = 0;
return sum + value;
}
template<typename T, typename ...Args>
T sum(T first, Args... args)
{
//std::cout << "param:" << first << std::endl;
return first + sum<T>(args...);
}
template <typename F, typename ...Args>
void for_each_args1(F&& func, Args...args) {
int arr[] = { (std::forward<F>(func)(args),0)... };
}
//c++17写法折叠表达式
template <typename F, typename ...Args>
void for_each_args(F&& func, Args...args) {
//int arr[] = { (std::forward<F>(func)(args),0)... };
(std::forward<F>(func)(args),...);
}
//c++17写法折叠表达式
template<typename F,typename...Args>
void print_for_each(F&&f,Args&&...arg)
{
(std::forward<F>(f)(arg),...);
}
int main()
{
// print_for_each([](auto value) {std::cout << value << std::endl;},4,5,6);
for_each_args([](auto value) {std::cout << value << std::endl;},1,2,3,4);
auto value =sum(1,2,3,4);
}