当前位置: 首页 > 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;并能够对分表进行聚合操作&…...

亲测有效!5个无广告免费源码网 —— 会员源码网深度解析

在当今数字化时代&#xff0c;源码资源对于开发者、创业者和企业来说至关重要。一个优质的源码网站不仅能提供丰富的代码资源&#xff0c;还能促进技术交流和创新。今天&#xff0c;我要向大家推荐一个亲测有效的无广告免费源码网——会员源码网。会员源码网简介会员源码网是一…...

SEO_如何通过内容优化有效提升SEO效果?(193 )

SEO内容优化&#xff1a;提升网站SEO效果的关键策略 在当今的数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了任何一个想要在网络上脱颖而出的关键步骤。特别是在百度这个中国最大的搜索引擎平台上&#xff0c;如何通过内容优化有效提升SEO效果&…...

【人工智能基础-机器学习】- 线性归回知识点(有个人理解)

机器学习&#xff1a;线性回归 一、线性回归基础 1.1 数据准备 将x0置为1&#xff0c;与xn组合得到nn的矩阵 1.2 理论基础 正态分布&#xff1a; 基于中心极限定理&#xff0c;误差&#xff08;预测值-实际值&#xff09;服从正态分布 最大似然估计&#xff08;MLE&#xff09;…...

掌握Makefile:从基础到高级的自动化构建指南,依托Java和百度地图实现长沙市热门道路与景点实时路况检索的实践探索。

make与Makefile基础概念 Make是Linux/Unix系统中用于自动化构建程序的工具&#xff0c;通过读取Makefile文件来执行编译、链接等操作。Makefile定义了项目文件的依赖关系及构建规则&#xff0c;避免重复编译未修改的源代码。 Makefile的核心由三部分组成&#xff1a; 目标(Targ…...

基于SpringBoot的高校餐饮档口管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Gemma-3-12b-it镜像一键部署:快速体验OpenClaw自动化能力

Gemma-3-12b-it镜像一键部署&#xff1a;快速体验OpenClaw自动化能力 1. 为什么选择云端体验OpenClaw 去年我第一次接触OpenClaw时&#xff0c;花了整整两天时间在本地配置环境。从Python版本冲突到CUDA驱动问题&#xff0c;再到模型权重下载失败&#xff0c;几乎踩遍了所有可…...

深入理解 sleep() 与 wait():从基础到监视器队列

前言看似都是“让线程停下来”&#xff0c;背后的原理却完全不同在 Java 并发编程中&#xff0c;sleep() 和 wait() 是两个经常被拿来比较的方法。很多初学者甚至有一定经验的开发者&#xff0c;也容易混淆它们。今天这篇文章&#xff0c;我们就从基础区别一路深入到监视器锁的…...

费马小定理,快速幂

今天显示延续了昨天的背包问题&#xff0c;先是写了一题背包问题&#xff0c;后面就写费马定理加快速幂。费马小定理证明如果一个数p是质数&#xff0c;并且a不是p的倍数&#xff0c;那么一定有a^&#xff08;p-1&#xff09;1&#xff08;mod p);那么自然有a^(p-2)a^-1(mod p)…...

5个革新方案:BetterJoy实现Switch手柄全场景PC适配

5个革新方案&#xff1a;BetterJoy实现Switch手柄全场景PC适配 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_…...

数字孪生简介

数字孪生简介摘要数字孪生&#xff08;Digital Twin&#xff09;作为连接物理世界与数字世界的核心技术&#xff0c;正在重塑全球产业格局。本报告系统梳理了数字孪生技术的概念演进、技术架构、行业应用及发展趋势&#xff0c;深入分析了其在智能制造、航空航天、智慧城市、医…...