- 基本语法:
template <typename... T> void f(T... args);
- 参数个数:
template<typename... T>
void PrmCount(T... Prm)
{
printf("prm count:%d \n", sizeof...(Prm));
}
-
参数包的展开:递归方式和逗号表达式
(1)递归方式:参数包展开的函数和一个递归终止函数,两个条件必须满足
template<typename T>
T Sum(T t)//递归终止函数
{
return t;
}
template<typename T, typename... U>
T Sum(T first, U... Prm)//参数包展开函数
{
return (first + Sum<T>(Prm...));
}
(2)逗号表达式:
template<typename F, typename... T>
void Sum2(const F& f, T&&... t)
{
std::initializer_list<int>{(f(std::forward<T>(t)), 0)...};//消除拷贝
}
- 调用:
#include "stdafx.h"
#include "templateTest.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
CTemplate objTemplate;
objTemplate.PrmCount(1, 2, 3);
objTemplate.PrmCount(1, 3, 4, 5, 3.6);
auto iSum = objTemplate.Sum(1, 3, 5, 6, 10);
printf("sum: %d \n", iSum);
int iSum2 = 0;
objTemplate.Sum2([&iSum2](int i)
{
iSum2 += i;
}, 1, 2, 4);
printf("iSum2:%d \n", iSum2);
return 0;
}
- 结果: