<hr> 前言
本篇文章笔者将会对C++11中又一重要问题进行探讨 — 可变参数模版 . 并且会对这部分常考的知识点进行深度讲解 .
<hr> 一、什么是模版 ?
● 模版
笔者在之前文章介绍过 , 这里简朴回顾一下 .
模板是C++⽀持参数化多态的工具 , 通过一种形式或形态能完成差别的内容/使命 .
在没有模版之前 , 我们想要写一个极其相似但又差别的函数 , 这时我们要写很多个去达到想要的效果 , 但是有了模版 , 就可以只写一个 " 工具 " , 这个工具可以大概帮我们生成对应的内容 .
以上简朴的讲解了一下 , 具体可以看笔者之前详解 ~ .
<hr> 二、可变参数模版
● 初见可变参数模版
1. 可变 , 就是参数类型可变的意思 , 不仅仅范围于参数类型必须相同 .
2. 还是一个模版
3. 分为模版参数包和函数参数包 , 即: 0 ~ n 个模版参数或 0 ~ n 个函数参数 .
可变参数本质是模版的模版 . (下方有具体介绍 ~) .
- template <class ...Args> //可变类型
- void f(Args ...args) // 可变参数
- {
- }
复制代码 … 是必须有的 , 表现包 . 其中可以为 0 ~ n 个参数或类型
Args 为名字 , 可以恣意起 .
<hr> ● 深剖可变参数模版
- 这里必须知道一个前提 , 模版的推导都是编译器帮我们完成 , 不需要我们管理
- 并且推导是在编译时进行的 .
复制代码 虽然 , 使命都交给了编译器去实现 , 那可变参数模版的原理是什么呢 ?
以下将探讨 .
给出以下代码 :
- //万能引用 , 这里面会涉及引用折叠
- template <class ...X> // 这里表示有很多个类型
- void Print(X&&...args) // 这里表示有很多个参数
- {
- }
- int main()
- {
-
- string st;
- //函数模版不用显示实例化 , 编译器会自动推导 , 编译器会自动生成相应的函数
- Print(); // 0 个参数
- Print(
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |