【C++】C++11可变参数模板
👀樊梓慕:个人主页
🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》
🌝每一个不曾起舞的日子,都是对生命的辜负
目录
前言
可变参数模板的定义方式
可变参数模板的使用
编译时递归展开参数包
可变参数模板的应用:emplace系列函数
对比emplace_back与push_back
emplace系列真正的优势在于浅拷贝的类
总结
List类增添模拟实现emplace系列函数
构造
emplace_back()
emplace()
前言
其实我们之前经常使用可变参数模板,C语言的printf函数大家一定非常熟悉,其实这就是一种可变参数模板:
那么在C++11引入可变参数模板的设计可以带来什么变化呢?让我们一起来学习下吧!
欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。
=========================================================================
GITEE相关代码:🌟樊飞 (fanfei_c) - Gitee.com🌟
=========================================================================
可变参数模板的定义方式
template 返回类型 函数名(Args... args) { //函数体 }
例如:
// Args是一个模板参数包,args是一个函数形参参数包 // 声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。 template void ShowList(Args... args) {}
- 模板参数Args前面有『 省略号』,代表它是一个可变模板参数,我们把带省略号的参数称为参数包,参数包里面可以包含0到任意个模板参数,而args则是一个函数形参参数包。
- 模板参数包Args和函数形参参数包args的名字可以任意指定,并不是说必须叫做Args和args,判断是否为参数包的主要关键在『 省略号』。
可变参数模板的使用
此时我们可以传入任意多个参数了,并且这些参数可以是不同类型的:
int main() { ShowList(); ShowList(1); ShowList(1, 'A'); ShowList(1, 'A', string("hello")); return 0; }
我们可以在函数模板中通过sizeof计算参数包中参数的个数:
template void ShowList(Args... args) { cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。