zoukankan      html  css  js  c++  java
  • 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视为一个整体来进行扩展

  • 相关阅读:
    学习进度条7
    2016年秋季个人阅读计划
    WampServer中MySQL中文乱码解决
    LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
    人月神话阅读笔记03
    人月神话阅读笔记02
    个人总结
    人月神话阅读笔记01
    学习进度条15
    学习进度14
  • 原文地址:https://www.cnblogs.com/cthon/p/9204557.html
Copyright © 2011-2022 走看看