C++可变参数模板函数基本用法

2023-05-16

可变参数模板可以创建任意个参数的模板函数和模板类,本文主要介绍可变参数模板函数。

1.1可变参数模板函数声明和定义

template<typename... Args>  //Args是一个模板参数包
void Show(Args... args)     //args是一个函数参数包
{
    //函数功能
    return;
}

由上面代码可知,Args是一个模板参数包,args是一个函数参数包,都表示一系列的参数。

可变参数模板函数一般用于可变参数输出,可变参数args的调用不能用args[2]方式调用,可以采用递归展开和非递归展开。下面示例给出了两种递归展开和非递归展开用法。

1.2可变参数模板函数调用示例

/*定义和声明一个多参数模板函数,递归方式展开*/
void Show1(){}   //定义零个参数函数,递归调用到零个参数函数时。调用该函数,然后终止继续递归
template<typename T,typename ... Args>  //Args是一个模板参数包
void Show1(const T &value,const Args &... args)     //args是一个函数参数包
{
    qDebug()<<"Show1 value=="<<value;
    Show1(args...);  //递归调用,依次展开每个参数。不能用args[2]方式调用,只能依次展开
}

/*定义和声明一个多参数模板函数,非递归方式展开*/
template<typename T>
void Print(T arg)
{
    qDebug()<<"Show2 Print(arg)=="<<arg;
}
template<typename ... Args>
void Show2(Args ... args)
{
    int a[]={(Print(args),0)...};
    for(uint i=0;i<sizeof a;i++)
        qDebug()<<QObject::tr("Show2 a[%1]==").arg(i)<<a[i];
}


/*调用按钮函数*/
void Widget::on_pushButton_2_clicked()
{
    Show1(1,2.0,"33","string");
    Show2(66,8888.0,"dsd","sd545sd2s");
}

1.3总结

由上面代码可知,模板函数Show1()为递归调用方式,模板函数Show2()为非递归调用方式。一般来说,递归调用方式安全可控,而非递归调用方式调用次数比较难以控制。

 

 

参考内容:

《C++ Primer Plus》(第6版)中文版  827-831页(参考:可变参数模板函数)

https://www.cnblogs.com/lsgxeva/p/7787500.html(参考:非递归展开方式)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++可变参数模板函数基本用法 的相关文章

  • Linux系统下CPU频率的调整

    省电 or 流畅 root 64 android sys devices system cpu cpu0 cpufreq cat scaling available governors hotplug conservative ondema
  • 禁止显示Apache目录列表-Indexes FollowSymLinks

    第一种方法 禁止显示Apache目录列表 Indexes FollowSymLinks 如何修改目录的配置以禁止显示 Apache 目录列表 缺省情况下如果你在浏览器输入地址 xff1a http localhost 8080 如果你的文件
  • 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP

    维护网络服务器最简单的方式不是跑去实体服务器前面登入 xff0c 而是透过远程联机服务器联机功能来登入主机 xff0c 然后再来进行其他有的没的维护就是了 Linux 主机几乎都会提供 sshd 这个联机服务 xff0c 而且这个服务还是主
  • 如何查看电脑jdk/jre版本以及安装路径

    一 按快捷键win 43 r打开运行窗口 二 输入cmd 回车 xff0c 打开命令框 三 输入 java version 查看jdk版本 注意 xff1a java后面需要有空格 xff0c 不然会报错 java span class t
  • AndroidID、IMEI、OAID获取

    前言 因为项目中经常会遇到要上传一系列设备信息的功能 xff0c 为了方便使用 xff0c 所以就拆分成以下系列文章来单独介绍如何获取各类设备信息 手机运营商获取 AndroidID IMEI OAID获取 地理位置信息经纬度获取 公网IP
  • (二)裸机汇编--点亮LED

    目标 xff1a 点亮LED 1 查数据手册 硬件图中 xff0c 找到LED灯对应的GPIO 从二极管方向看出 xff0c 端口输出低电平时 xff0c 电流经过 xff0c LED点亮 再到数据手册查找对应的寄存器 GPBCON xff
  • Excel中将十六进制字符串转换为汉字的方法

    比如十六进制字符串 D0C2BDAE 转换方法是 在公式里面输入 61 CHAR HEX2DEC LEFT C6 4 amp CHAR HEX2DEC MID C6 5 4 其中C6 是十六进制所在的单元格 xff0c 原理很简单 xff0
  • C - 班长竞选(Kosaraju算法

    题意 xff1a input 本题有多组数据 第一行 T 表示数据组数 每组数据开始有两个整数 N 和 M 2 lt 61 n lt 61 5000 0 lt m lt 61 30000 xff0c 接下来有 M 行包含两个整数 A 和 B
  • debian 11安装pip

    安装curl sudo apt get install curl下载文件get pip py curl https bootstrap pypa io get pip py o get pip py安装依赖python3 distutils
  • Linux运行jar包报错:Error:Invalid or corrupt jarfile xxx.jar

    各种查找 xff0c 没有对症的 xff0c 最后仔细查看信息提示发现是自己大意造成的 xff0c 原因是服务器空间不足导致保存传递过来的jar包不完整导致的 巨坑 xff01 怪自己不够仔细
  • [HPM] Error occurred while trying to proxy request /login/account from localhost:8000 to localhost:8

    HPM Error occurred while trying to proxy request login account from localhost 8000 to localhost 8888 api ENOTFOUND https
  • Unable to perform this action because the process is running.

    总感觉会有小伙伴和我一样纠结吧 我在使用vs code的时候想用调试控制台输入输出 xff0c 结果在输入的时候遇到了这个问题 xff0c 为什么呢 xff0c 我也不知道 xff0c 但是有一个是明确的 xff0c 就是调试控制台不可以作
  • VS Code 翻译插件

    translate var 使用翻译api将其他语言到英文 转换成常见的变量命名形式 Automatically translate words into English variable name Keybindings win 34 A
  • 从ASP.NET Core 3.1中的当前URL获取主机信息

    目录 介绍 问题陈述 解决方案 介绍 在处理 Web 应用程序时 xff0c 很自然 xff0c 我们需要在产品生命周期的各个阶段在各种环境 xff08 即开发 xff0c 测试 xff0c 生产等 xff09 之间切换 换句话说 xff0
  • ONNX系列六 --- 在Java中使用可移植的ONNX AI模型

    目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547 1 KB 系列文章列表如下 xff1a ONNX系列一 带有ONNX的便携式神经网络 ONNX系列二 使用ONNX使Ker
  • 绒毛动物探测器:通过TensorFlow.js中的迁移学习识别浏览器中的自定义对象

    目录 起点 MobileNet v1体系结构上的迁移学习 修改模型 训练新模式 运行物体识别 终点线 下一步是什么 xff1f 我们可以检测到脸部吗 xff1f 下载TensorFlowJS Examples master zip 6 1
  • YOLOv7 在 ML.NET 中使用 ONNX 检测对象

    目录 什么是 YOLO ONNX 模型 执行预测 示例和参考 References 什么是 YOLO YOLO xff08 You Only Look Once xff09 是一种先进的实时目标检测系统 它是一个在COCO数据集上预训练的物
  • 如何转换PyTorch模型并使用OpenVINO™工具包运行它

    注意 xff1a 本文是使用 OpenVINO 2022 1 创建的 如果您想知道如何使用 OpenVINO 2021 4 的旧 API xff0c 请查看 此notebook 尽管 PyTorch 是 AI 训练的绝佳框架 xff0c 可
  • 程序设计思维与实践 Week14 作业

    A Q老师与石头剪刀布 题意 xff1a 每一个大人曾经都是一个小孩 xff0c Q老师 也一样 为了回忆童年 xff0c Q老师 和 Monika 玩起了石头剪刀布的游戏 xff0c 游戏一共 n 轮 无所不知的 Q老师 知道每一轮 Mo
  • 高可用:MongoDB 容器部署

    MongoDB 是一款 NoSQL 数据 xff0c 通常用来存储非结构化数据 xff0c 我们的产品中也有用到 xff0c 例如 xff1a 一些文件存储在 MongoDB 的 GridFS 中 MongoDB 有三种方式来实现高可用 x

随机推荐

  • 在C#语言中监视SQL Server中的实时数据库更改

    目录 介绍 介绍 在本文中 xff0c 我想向您解释如何在不需要 SQL 依赖和服务代理的情况下监视数据库 有许多方法可以监视数据库更改 xff0c 其中一种方法是 SQL 依赖和服务代理 xff0c 但是在本教程中 xff0c 我们将不使
  • 用Python 3编写的Python 3代码生成器

    目录 介绍 使用代码 关于create python prog py 关于variable name 关于parameter type 关于parameter count token 关于parameter switches 有关布尔参数的
  • 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0"[已解决]

    前两天升级系统架构 xff0c 升级后打开网页报错了 xff01 xff01 xff01 详细信息如下 xff1a 未能加载文件或程序集 Newtonsoft Json Version 61 4 5 0 0 Culture 61 neutr
  • 联想拯救者Y7000系统安装之路(Win10系统)

    最近新购得联想拯救者Y7000 xff0c 到手的第一件事情就是重装系统 xff0c 这个大家都懂的 使用F2进入BIOS界面 xff0c 使用F12可进入快速启动选择U盘启动 接下来问题来了 xff0c 我用老毛桃制作的U盘启动盘 xff
  • win10 服务主机:DCOM服务器进程启动器 进程导致电脑卡死解决思路

    新买的笔记本 xff1a 联想拯救者Y7000 系统 xff1a win10专业版 xff08 已经禁用了网上可搜的服务 xff0c 没有win10开始菜单的磁条 xff09 原因 xff1a 总是在开机一段时间后系统卡死 xff0c 只能
  • Windows 全新终端 Windows Terminal

    本项目包含 xff1a Windows TerminalWindows 控制台主机 conhost exe 上述两项目的共享组件ColorTool示例项目 将展示如何使用 Windows Console APIs Windows Termi
  • python项目打包发布详解

    PyInstaller打包Python项目详解 lt h1 gt lt div class 61 34 clear 34 gt lt div gt lt div class 61 34 postBody 34 gt PyInstaller打
  • python批处理打开多个文件

    背景 xff1a 有时候我们需要在服务器上同时运行多个程式 xff0c 但是却需要一个一个的打开 xff0c 比较费时间 xff0c 而且一旦服务器重启后 xff0c 不懂程式运行的人受限于环境及代码原理 xff0c 很难逐个将程式逐个打开
  • 挂载别的系统挂掉的磁盘解决步骤,mount: unknown filesystem type ‘LVM2_member‘ 报错

    挂载别的系统挂掉的磁盘解决步骤 1 在新的虚机添加磁盘 按照下边操作步骤即可使linux系统重新读取并识别到新硬盘 xff1a 1 1 确定主机总线号 xff1a root 64 iNeedle ls sys class scsi host
  • 序设计思维与实践 CSP-M4

    A 题意 xff1a 题目描述 这一天 xff0c TT因为疫情在家憋得难受 xff0c 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 xff0c 看到了许多在湖边嬉戏的鸭子 xff0c TT顿生羡慕 此时
  • C++ 构造函数详解

    目录 0 什么是构造函数 1 默认构造函数 2 一般构造函数 3 拷贝构造函数 4 转换构造函数 5 移动构造函数 0 什么是构造函数 在定义类的成员函数的时候 xff0c 一般的成员函数与普通的全局函数没有太大的区别 xff0c 在定义函
  • Copilot 简单测评

    年初的时候通过了Copilot的试用申请资格 xff0c 试用到现在也几个月了 xff0c 说一下使用的感受 最开始理解Copilot xff0c 是通过注释来生成代码 xff0c 在这个想法下 xff0c 感觉自己又又又又要失业了 xff
  • iPhone开发【十四】多线程开发之NSThread——子线程模拟耗时操作

    转载请注明出处 xff0c 原文网址 xff1a http blog csdn net m changgong article details 8213964 作者 xff1a 张燕广 实现的功能 xff1a 1 xff09 演示多线程开发
  • 学习c语言的总结

    学习时间 xff1a 早上9点 晚上9点 学习内容 xff1a 利用c语言对 的代码学习 xff0c 并根据自己的理解编写代码 xff0c 最后整合学习的代码和自己理解的代码 xff0c 编写出更优的代码 学习体会 xff1a 对一个问题举
  • Makefile使用细节

    变量及通配符 A 61 C 即时变量 xff0c 此时C未定义 xff0c A为空 B 61 C 延时变量 xff0c 用到B时再确定具体的值 C 61 abc C 61 123 C不是第一次定义 xff0c 被忽略 C 43 61 789
  • Debian修改桌面系统

    今天 xff0c 装了Debian xff0c 发现其桌面不好看 xff0c 感觉就像瘟逗死系统 xff0c 寻思着更换一下 xff0c 于是就度娘 xff0c 但遗憾的是没有找到 xff0c 想一下不如自个儿研究哈哈 xff0c 所以记录
  • csp 序列查询新解 解决70分超时和错误的思路

    这个题的代码我再也不会看的 因为这题就是一个发现数与数之间联系的一道题 xff0c 不会再看了 总结一下 xff1a 这道题别人AC是用了两层for循环 但内层的for里第三个条件不是i 43 43 是i 43 61 一个区间长度 这就过了
  • bat批处理文件建立和打开

    一 新建bat文件 1 1新建文本文件 xff0c 在文本文件写入如下内容 xff1a xff08 注意不要有中文路径和中文名称 xff09 格式 xff1a start 目录路径 app exe 具体的实例如下所示 xff1a start
  • 安装树莓派vnc或者xrdp出错解决办法(树莓派ping不同Windows、但是Windows可以ping通树莓派)(树莓派上搭建好了vnc环境和xrdp环境)

    1 1出现问题 博主按照这篇教程https blog csdn net naibozhuan3744 article details 84961041搭建树莓派vnc环境或者xrdp环境时 xff0c 一直出现win10系统ping不通树莓
  • C++可变参数模板函数基本用法

    可变参数模板可以创建任意个参数的模板函数和模板类 xff0c 本文主要介绍可变参数模板函数 1 1可变参数模板函数声明和定义 template lt typename Args gt Args是一个模板参数包 void Show Args