当前位置: 首页 > news >正文

【C++】可变参数模板简单介绍

前言

可变参数模板是C++11中的新特性,它能够让我们创建可以接收可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数是一个巨大的改进,通过系统系统推演数据的类型,不用自己写出模板参数类型。

下面我们来创建一个基本的的能够接收可变参数的函数模板:

template<class ...Args>
void ShowFunc(Args... args)
{
}

声明一个参数包Args... args,这个参数包中可以包含0到任意个模板参数。

上面代码中Args是一个模板参数包,args是一个函数形参参数包。

#include<iostream>
#include<string>
using namespace std;
template<class ...Args>
void ShowFunc(Args... args)
{cout << sizeof...(args) << endl;
}
int main()
{ShowFunc(1);ShowFunc(1, 1.1);ShowFunc(1, 1.1, 'A', std::string("sort"));return 0;
}

sizeof...(args)是计算该函数中含有多少个参数,即计算函数形参的个数。

下面我们来看一下如何使用可变参数的函数模板获取其参数包的值。

方法一:编译器编译时的递归推演:第一个模板参数依次解析获取参数包中的参数值。

#include<iostream>
#include<string>
using namespace std;// 递归终止函数
template <class T>
void ShowFunc(const T& t)
{cout << t << endl;
}
// 展开函数
template <class T, class ...Args>
void ShowFunc(T value, Args... args)
{cout << value << " ";ShowFunc(args...);
}
int main()
{ShowFunc(1);ShowFunc(1, 1.1);ShowFunc(1, 1.1, 'A', std::string("sort"));return 0;
}

方法二:利用逗号表达式展开参数包:初始化数组arr,强行让编译器解析参数包,参数包有几个参数,PrintArg就自动推演生成相应个。

#include<iostream>
#include<string>
using namespace std;template <class T>
void PrintArg(T t)
{cout << t << " ";
}
//展开函数
template <class ...Args>
void ShowFunc(Args... args)
{int arr[] = { (PrintArg(args), 0)... };cout << endl;
}
int main()
{ShowFunc(1);ShowFunc(1, 'A');ShowFunc(1, 'A', std::string("CSDN"));return 0;
}

 

相关文章:

【C++】可变参数模板简单介绍

前言 可变参数模板是C11中的新特性&#xff0c;它能够让我们创建可以接收可变参数的函数模板和类模板&#xff0c;相比C98/03&#xff0c;类模版和函数模版中只能含固定数量的模版参数&#xff0c;可变模版参数是一个巨大的改进&#xff0c;通过系统系统推演数据的类型&#xf…...

RabbitMQ--死信队列

目录 一、死信队列介绍 1.死信 2.死信的来源 2.1 TTL 2.2 死信的来源 3.死信队列 4.死信队列的用途 二、死信队列的实现 1.导入依赖 pom.xml 2.application.properties 3.配置类 4.生产者 5.业务消费者&#xff08;正常消费者&#xff09; 6.死信队列消费者 一、…...

微信小程序毕业设计-基于Java后端的微信小程序源码150套(附源码+数据库+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的微信小程序毕业设计&#xff0c;后台用Java开发&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设…...

提前预知职业天赋!霍兰德职业兴趣测试API接口给你精准推荐

霍兰德职业倾向测验&#xff0c;它是美国著名职业指导专家J&#xff0e;霍兰德&#xff08;HOLLAND&#xff09;编制的&#xff0c;他的职业选择理论把职业分为六种不同类型&#xff0c;即现实型、研究型、艺术型、社会型、企业型、常规型。霍兰德认为&#xff0c;每个人都是这…...

js强大的运算符:??、??=

学习目标&#xff1a; js中强大的运算符 ?? 非空运算符 学习内容&#xff1a; ?? 非空运算符 注意&#xff1a;?? 运算符被称为非空运算符。如果第一个参数不是 null/undefined 将返回第一个参数&#xff0c;否则返回第二个参数 之前&#xff1a; 给变量设置默认值时…...

【MATLAB源码-第207期】基于matlab的单相光伏并网系统仿真,并网策略采用基于扰动观测法的MPPT模型和使用电压电流双闭环SPWM控制。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 本文将重点分析光伏发电最大功率点跟踪&#xff08;MPPT&#xff09;技术和逆变器的并网控制技术&#xff0c;并在Simulink环境下建立模拟系统&#xff0c;以体现这些技术的应用与效果。文章结构如下&#xff1a;首先简介光伏…...

java发送请求-二次开发-get请求json

这里有2个判断 如果param为空则对url发送请求 再继续判断有值时&#xff0c;接口参数时json还是namevalue格式 因为json是带{,所以可以先写为param包含{}, 反之就是请求格式是url&#xff1f;param 请求json要带参数&#xff0c;所以需要使用setEntity方法&#xff0c; 最…...

Typescript高级: 对泛型和多态的应用, 实现Java中的ArrayList和LinkedList

ArrayList 1 ) 概述 在Java中&#xff0c;ArrayList是一个非常常用且强大的数据结构&#xff0c;它提供了动态数组的功能能够方便地添加、删除和访问元素。在TypeScript中&#xff0c;虽然并没有内置的ArrayList类型但我们可以通过类与接口来模拟实现ArrayList的功能 2 &…...

正则表达式常用特殊字符(元字符)说明

正则表达式中包含多种特殊字符&#xff08;也称作元字符&#xff09;&#xff0c;它们具有特定的含义&#xff0c;用于构建复杂的匹配模式。以下是一些常用的特殊字符序列及其含义&#xff1a; \d - 匹配任何数字&#xff0c;等同于 [0-9]。\D - 匹配任何非数字字符&#xff0…...

使用hdc TCP模式无线方式连接OpenHarmony设备

本文将介绍如何使用hdc工具 tcp模式以无线的方式连接OpenHarmony设备。 1. usb连接方式切换为tcp模式。 将usb线将OpenHarmony设备和电脑端连接&#xff0c;并且将两个连接至同一个局域网。 # 执行 tmode port port-number&#xff0c;port-number设置为端口号。 hdc tmode …...

杂记-记一次前端打包问题解决过程

背景 若干年没更新发布的前端项目&#xff0c;突然来了个小需求&#xff0c;需求完成耗时5min&#xff0c;打包问题解决2小时 问题 error commander12.0.0: The engine “node” is incompatible with this module. Expected version “>18”. Got “10.22.1” 这个错误…...

维修ABB示教器主板DSQC679 3HAC 033624-001 /R机器人液晶显示屏深圳捷达工控维修

ABB 机器人示教器是工业环境中用于对机器人系统进行编程和控制的重要工具。这些手持设备允许操作员与机器人交互、输入命令并教它们特定的动作和任务。 每个 ABB 机器人示教器均专为用户友好型操作而设计&#xff0c;具有直观的界面和易于使用的人体工学设计。有多种型号可供选…...

原子学习笔记3——点亮 LED

一、应用层操控设备的两种方式 应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现&#xff0c;设备文件便是各种硬件设备向应用层提供的一个接口&#xff0c;应用层通过对设备文件的 I/O 操作来操控硬件设备&#xff0c;譬如 LCD 显示屏、串口、按键、摄像…...

齐护K210系列教程(十八)_识别条码

识别条码 联系我们 将识别到的条形码内容打印输出并显示 测试条形码可以到如下网站得到&#xff1a;http://www.jsons.cn/barcode/ 4&#xff0c;课程资源 课程程序下载&#xff1a;【18条形码】 联系我们 扫码 或者点这里加群了解更多&#xff01; Created by qdprobot...

K折交叉验证

训练数据稀缺&#xff0c;无法构成验证集。 所以我们将训练数据分为k个子集。 执行k次模型训练和验证。每次在k-1个子集上进行训练&#xff0c; 并在剩余的一个子集&#xff08;该轮没有训练的子集&#xff09;上进行验证。 最后&#xff0c;这k次实验结果取平均来估计训练和验…...

Docker 的 Ubuntu 操作系统镜像

Debian 和 Ubuntu 都是目前较为流行的 Debian 系列 的服务器操作系统&#xff0c;十分适合研发场景。 Debian 和 Ubuntu 属于同一系列的发行版。Debian 是由 Ian Murdock 在 1993 年创建的最初的发行版。Ubuntu 是 Mark Shuttleworth 在 2004 年基于 Debian 创建的发行版。 Li…...

【Python】Python中的logging模块介绍和示例

Python中的logging模块是一个强大的内置模块&#xff0c;用于记录和跟踪应用程序的运行过程。它提供了灵活的日志记录功能&#xff0c;可以将日志消息输出到多个目标&#xff08;如控制台、文件、远程服务器等&#xff09;&#xff0c;并支持不同的日志级别。以下是logging模块…...

PXIe规格i3/i5/i7单板计算机控制器

是专为PXIe混合测试系统设计的主控制器&#xff0c;3U 12HP PXIe规格。该产品采用Intel Core™i3/i5/i7 第四代高性能处理器&#xff0c;内存可支持高达16G DDR3L。该系统PXI Express的link配置为通用的4Port 4lane的模式&#xff0c;数据吞吐量高达8GB/S。 CX786x提供丰富灵活…...

弱网对抗的策略有哪些?

在弱网环境下&#xff0c;数据传输可能会面临丢包、延迟、抖动等问题&#xff0c;因此采取合适的弱网对抗策略对于确保数据传输的稳定性和可靠性至关重要。以下是一些常见的弱网对抗策略&#xff1a; 数据压缩&#xff1a;使用压缩算法如Gzip、Brotli等对数据进行压缩&#xf…...

如何通过OMS加快大表迁移至OceanBase

OMS&#xff0c;是OceanBase官方推出的数据迁移工具&#xff0c;能够满足众多数据迁移场景的需求&#xff0c;现已成为众多用户进行数据迁移同步的重要工具。OMS不仅支持多种数据源&#xff0c;还具备全量迁移、增量同步、数据校验等功能&#xff0c;并能够对分表进行聚合操作&…...

小红书内容管理困境与XHS-Downloader的优雅解决方案

小红书内容管理困境与XHS-Downloader的优雅解决方案 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链接&#xff1b;采集小…...

2026论文必藏降AIGC软件大曝光:一键压到安全线谁最稳

2026年的学术战场已经彻底变了天&#xff0c;论文不再是简单的知识输出&#xff0c;而是一场与AI检测系统的极限博弈。过去大家还在为查重率发愁&#xff0c;现在却集体陷入了更深层的焦虑——如何在不牺牲论文质量的前提下&#xff0c;把AIGC率压到最低&#xff1f;随着AI检测…...

明日方舟智能基建管理:Arknights-Mower 完整指南与实战应用

明日方舟智能基建管理&#xff1a;Arknights-Mower 完整指南与实战应用 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 还在为《明日方舟》基建管理的繁琐操作而烦恼吗&#xff1f;每天重复的干员…...

数据治理:数据质量与元数据管理

数据治理&#xff1a;数据质量与元数据管理 大家好&#xff0c;我是欧阳瑞&#xff08;Rich Own&#xff09;。今天想和大家聊聊数据治理这个重要话题。作为一个全栈开发者&#xff0c;数据治理是确保数据资产价值的关键。今天就来分享一下数据质量和元数据管理的实战经验。 数…...

GoogleTranslate_IPFinder高级功能详解:自定义IP段扫描与在线同步服务

GoogleTranslate_IPFinder高级功能详解&#xff1a;自定义IP段扫描与在线同步服务 【免费下载链接】GoogleTranslate_IPFinder 谷歌翻译API服务器的IP扫描、测速工具。 项目地址: https://gitcode.com/gh_mirrors/go/GoogleTranslate_IPFinder GoogleTranslate_IPFinder…...

OpenClaw 微信接入指南:从安装到绑定,一步到位

下载地址&#xff1a;OpenClaw Windows 一键部署包 https://xiake.yun/api/download/package/16?promoCodeIV9D9D5198DC OpenClaw 绑定微信教程 1&#xff1a;软件下载完成界面 2&#xff1a;选择右上角设置 3&#xff1a;选择聊天配置 4&#xff1a;选择右边展开&#xff…...

单北斗GNSS变形监测系统在地质灾害监测中的应用与维护

北斗 GNSS 变形监测系统在地质灾害监测中发挥着重要作用。它通过高精度定位&#xff0c;实时捕捉地面形变&#xff0c;为防灾减灾提供精准数据支持。系统的定制化设计能适应不同环境&#xff0c;同时具备稳定性与可靠性。随着技术发展&#xff0c;监测和维护也变得更高效。这种…...

面试必问:RAG准确率提升实战:从60%到85%的全链路优化

✅ 面试官您好&#xff0c;关于如何将 RAG 系统的准确率从 60% 提升到 85%&#xff0c;我认为这不是一个简单的调参问题&#xff0c;而是一场贯穿数据、检索、生成、评估全链路的系统性工程。我通常会按照“诊断 → 优化 → 验证”三步走策略来推进&#xff0c;具体如下&#x…...

G-Helper完整指南:释放华硕笔记本潜能的轻量级控制神器

G-Helper完整指南&#xff1a;释放华硕笔记本潜能的轻量级控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…...

终极AI音乐创作工具:5分钟生成专业级歌曲翻唱

终极AI音乐创作工具&#xff1a;5分钟生成专业级歌曲翻唱 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 你是否曾经梦想…...