可变模板参数---- C++11新特性
- 可变模板参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数
- 由于可变模版参数比较抽象,使用起来需要一定的技巧,所以它也是C++11中最难理解和掌握的特性之一
参数包(parameter pack)
模板参数包,如:
template<typename… Args>class tuple;
- Args标识符的左侧使用了省略号,在C++11中Args被称为“模板参数包”,表示可以接受任意多个参数作为模板参数,编译器将多个模板参数打包成“单个”的模板参数包.
函数参数包,如
template<typename…T> void f(T…args);
- args被称为函数参数包,表示函数可以接受多个任意类型的参数.
在C++11标准中,要求函数参数包必须唯一,且是函数的最后一个参数; 模板参数包则没有
当声明一个变量(或标识符)为可变参数时,省略号位于该变量的左侧
当使用参数包时,省略号位于参数名称的右侧,表示立即展开该参数,这个过程也被称为解包
包扩展表达式
设args被声明为一个函数参数包,其扩展方式有
printArgs(args…)
- 相当于printArgs(args1,args2,…,argsN)
printArgs(args)…
- 相当于printArgs(args1),…, printArgs(argsN)
(printArgs(args),0)… 逗号表达式
- 这是一个逗号表达式。相当于(printArgs(args1),0),…(printArgs(argsN),0)
包扩展表达式“exp…”相当于将省略号左侧的参数包exp视为一个整体来进行扩展
原文地址:https://www.cnblogs.com/cthon/p/9204557.html
时间: 2024-12-10 04:30:31