C++模板之可变模板参数

可变模板参数---- 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视为一个整体来进行扩展

 

posted @ 2018-06-20 16:42  CTHON  阅读(2622)  评论(0编辑  收藏  举报