理解C++可变参数模板的几种展开方式 | 您所在的位置:网站首页 › c3467参数 › 理解C++可变参数模板的几种展开方式 |
前言 可变参数模板(variadic templates)是C++11新增的强大的特性之一,它对模板参数进行了高度泛化,能表示0到任意个数、任意类型的参数。相比C++98/03这些类模版和函数模版中只能含固定数量模版参数的“老古董”,可变模版参数无疑是一个巨大的进步。 如果是刚接触可变参数模板可能会觉得比较抽象,使用起来会不太顺手,使用可变参数模板时通常离不开模板参数的展开,所以本文来列举一些常用的模板展开方式,帮助我们来对可变参数模板有一个初步的了解。 可变参数模板的定义可变参数模板和普通模板的定义类似,在写法上需要在 typename 或 class 后面带上省略号...,以下为一个常见的可变参数函数模板: template void func(T... args) { //... }上面这个函数模板的参数args前面有省略号,所以它就是一个被称为模板参数包(template parameter pack)的可变模版参数,它里面包含了0到N个模版参数,而我们是无法直接获取args中的每个参数的,只能通过展开参数包的方式来获取参数包中的每个参数,这也是本文要重点总结的内容。 参数包的展开参数包展开的方式随着c++语言的发展也在与时俱进,我们以实现一个可变参格式化打印函数为例,列举一些常用的方式: ①递归函数方式展开 #include void FormatPrint() { std::cout |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |