template之变参模板学习
转自:https://www.cnblogs.com/qicosmos/p/4325949.html,讲的很好
1.介绍
C++11的新特性--可变模版参数(variadic templates)对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。 要用三个点来定义:
template <class... T> void f(T... args);
省略号的作用有两个:
- 1.声明一个参数包T... args,这个参数包中可以包含0到任意个模板参数;
- 2.在模板定义的右边,可以将参数包展开成一个一个独立的参数。
但无法直接获取参数包args中的每个参数的,只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特点,也是最大的难点,即如何展开可变模版参数。
2.递归展开参数包
需要提供一个参数包展开的函数和一个递归终止函数,递归终止函数正是用来终止递归的。
上述链接中给了例子,还可以通过逗号表达式来展开参数。另外如果是变参模版类和变参模板函数展开参数包的方式还不一样。
好复杂,目前用不到,我先不看了。