当前位置:首页 » 《关于电脑》 » 正文

C++ 可变参数模板

4 人参与  2024年05月12日 17:10  分类 : 《关于电脑》  评论

点击全文阅读


可变参数列表

C语言中的可变参数列表

#include <iostream>int main(){    printf("%d %d %d", 1, 2, 3);    return 0;}

​ ***可变参数列表:***接受任意个数的参数,如 printf

int printf(const char* format, ...);

​ 函数定义形参部分带 … 。在 C 语言中,三个点并非必要。

C++中的可变参数列表

形参包

void f(int ...num);

形参包: … 与形参名结合便是形参包。形参包可接受任意多个参数。

​ ***范式:***上述的 num 便是范式。… 在形参名之前。

void f(int ...num) {    int arr[] = {num...};    //假设传了五个参数,则展开后为    //int arr[] = {num1, num2, num3, num4, num5};}

​ ***形参包展开:***参数列表中创建的形参包在后续使用必须展开。… 在范式后即为形参包展开。只展开 … 之前的语句,语句必须带范式形参。展开后的语句以逗号隔开。

可变参数模板

类型形参包

template<typename ...T>

​ ***类型形参包:***与形参包类似,… 后带类型模板便是类型形参包。

template<typename ...T>std::common_type_t<T...> Add(T ...num) {    /*...*/}/*std::common_type_t<T...>:自动适配尖括号中类型形参包的公共类型。假设调用为:Add(1.2,3,5.5f,'\0',2ULL):std::common_type_t<T...>展开后为:std::common_type_t<double, int, float, char, unsign long long>Add(T ...num)展开后为:Add(double num1, int num2, float num3, char num4, unsign long long num5)*/

​ ***类型形参包展开:***与形参包展开类似,… 在类型名后便是类型形参包展开。

***总结:***三个点在变量名或模板类型名前是创建形参包,三个点在变量名或模板类型名后是展开形参包。

形参包后续类型形参

#include <numeric>template<typename ...Args, typename RT = std::common_type_t<Args...>>RT Add(const Args& ...nums) {RT temp[] = { nums... };return std::accumulate(std::begin(temp), std::end(temp), RT{ 0 });}//std::accumulate 通过迭代器求和//std::accumulate(起始迭代器, 终止迭代器, 求和结果变量)

​ 后续类型形参无法手动指定,只能通过缺省类型进行指定或推导。

推导指引(C++17)

​ 推导指引只作用于类型模板。

template<typename T>struct test {private:T a;public:test(T n) :a{ n } {}void type() {std::cout << typeid(a).name() << std::endl;}};//推导指引,将int类型推导为double类型后调用模板test(int)->test<double>;

利用可变参数模板进行推导指引

//模板A,定义结构体arraytemplate<typename Ty, std::size_t size>struct array {Ty arr[size];};//模板B,用于推导指引template<typename T, typename ...Args>array(T, Args...) -> array<T, sizeof... (Args) + 1>;//sizeof...(形参包):形参包参数个数

​ 如果没有模板B,多参数创建 array 必须指定模板类型。

array<int,5> a{ 1,2,3,4,5 };array a{ 1,2,3,4,5 };//没有模板B则编译不通过,编译器无法自行推导

点击全文阅读


本文链接:http://zhangshiyu.com/post/107536.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 进错房,嫁给八零最牛特种兵已完结(林晚夏江肆年)抖音热文_《进错房,嫁给八零最牛特种兵已完结》最新章节免费在线阅读 -
  • 重生后选魔族,天族哭着求我当王全章节(月沁雪任意)全文免费阅读无弹窗大结局_(重生后选魔族,天族哭着求我当王全章节)重生后选魔族,天族哭着求我当王全章节免费阅读全文最新章节列表_笔趣阁(重生后选魔族,天族哭着求我当王全章节) -
  • 捡回摄政王后,她在皇室作威作福完结版小说(景飞鸢赵灵杰)全文免费阅读无弹窗大结局_(捡回摄政王后,她在皇室作威作福完结版免费阅读全文大结局)最新章节列表_笔趣阁(捡回摄政王后,她在皇室作威作福完结版) -
  • 千金难泣(立轩苏子骞翠竹吴进)全本免费在线阅读_千金难泣最新章节在线阅读(立轩苏子骞翠竹吴进)
  • 《沈云阶傅宴辞》(沈云阶傅宴辞》已完结完整版全集大结局小说)全文阅读笔趣阁
  • 《沈凌峰沈国华》已完结小说全文阅读笔趣阁《沈凌峰沈国华》
  • 《傅嫤韩恬魏郯程茂》已完结(傅嫤韩恬魏郯程茂)热门小说全目录完整版)全文阅读笔趣阁
  • 八零俏军医错嫁糙汉军官:番外+全文+后续(贺昭朗孟翩然)完本小说免费_全本免费小说八零俏军医错嫁糙汉军官:番外+全文+后续最新小说全文阅读(贺昭朗孟翩然)
  • 失去千千万万遍在线阅读(阮相宜陆凛言)全文免费阅读无弹窗大结局_(失去千千万万遍在线阅读)失去千千万万遍在线阅读免费阅读全文最新章节列表_笔趣阁(失去千千万万遍在线阅读) -
  • 脱离世界后,妻子疯了火爆小说小说(沈夕颜林程言)全文免费阅读无弹窗大结局_(脱离世界后,妻子疯了火爆小说免费阅读全文大结局)最新章节列表_笔趣阁(脱离世界后,妻子疯了火爆小说) -
  • 跨年发生踩踏,男友为救白月光丢下我(温林初宝宝)免费阅读 -
  • 都重生了,还不离婚等啥呢宋招弟霍文铮小说在线章节免费阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1