10,遍历任意参

遍历可变参数

  • 遍历可变参数
  • 获取可变参数大小
  • 通过递归方式遍历可变参数
  • 通过可变参数特性来求和

遍历可变参数

#pragma oncetemplate<class ... ParamTypes>
void Func(paramTypes &... param)
{}

可以看作是有一个结构体里面装满了参数,把结构体放到…中。就是一块内存传进去了

遇到需要遍历任意参时按下列代码执行即可

advanced.h

#pragma once
#include <iostream>
using namespace std;template<class T>
char PrintArg(T& arg)
{cout << arg << endl;return 0;//写上此行代码可以让(PrintArg(param),0)变为PrintArg(param)
}template<class ... ParamTypes>
void Func(ParamTypes &... param)
{//std::forward()//可以把右值移到左值char arr[] = { PrintArg(param)... };//展开时会出现拷贝//char arr[] = {(PrintArg(param),0)... };//意思是展开param参数,之后在PrintArg打印//0在此处作用位占位,展开后如下,写1就用1占位//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//也可以写成下列代码,会展开成字节码//char arr[] = { param ... };
}

学习.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";Func(a,b,c);return 0;
}

输出结果:

10
20
Hello

获取可变参数大小

固定语法,直接写

advanced.h

#pragma once
#include <iostream>
using namespace std;//获取长度
template<class ... ParamTypes>
void FuncLen(ParamTypes &... param)
{cout << sizeof...(param)<<endl;
}

学习.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";FuncLen(a, b, b);return 0;
}

输出结果:

3

通过递归方式遍历可变参数

牺牲可读性来换高效遍历

advanced.h

#pragma once
#include <iostream>
using namespace std;//匹配递归遍历时的极端情况 没有参数
void FuncFindParam()
{cout << "没参数了" << endl;
}
//通过递归来遍历参数
template<class T,typename ... ParamTypes>
void FuncFindParam(T& Head, ParamTypes &...Param)
{cout << "Head = " << Head << endl;FuncFindParam(Param...);//相当于一个数组,去一个元素,删掉一个元素,最后遍历完成数组变为空
}

学习.cpp

#include <iostream>
#include"advanced.h"int main()
{int a = 10;float b = 20.0f;char c[] = "Hello";FuncFindParam(a, b, c, a, b, c);return 0;
}

输出结果:

Head = 10
Head = 20
Head = Hello
Head = 10
Head = 20
Head = Hello
没参数了

通过可变参数特性来求和

advanced.h

#pragma once
#include <iostream>
using namespace std;//输出结果
template<typename ParamTypes>
ParamTypes &FunValue(ParamTypes &Param)
{return Param;
}
//求和
template<class T,typename ... ParamTypes>
T FunValue(T& Head,ParamTypes &... Param)
{return Head + FunValue<T>(Param ...);
}

学习.cpp

#include <iostream>
#include"advanced.h"int main()
{int a1 = 10;int a2 = 20;int a3 = 30;int i = FunValue(a1, a2, a3);cout << i << endl;return 0;
}

输出结果:

60

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git多版本并行开发实践

本文目的&#xff1a; 实现多个项目同时进行的git多版本管理工作流。 名词解释&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一个项目或者一个迭代&#xff0c;在该分支上开发&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;删除该分支&#xff0c;…

【广州虚拟现实开发】VR智能中控系统进一步提高VR教学管理水平

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐走进了人们的生活。在教育领域&#xff0c;VR技术也得到了广泛的应用&#xff0c;尤其是在教学终端中控系统方面。那么&#xff0c;广州华锐互动开发的VR智能中控系统对学校有何益处呢&#xff1f; 首先&#xff0c;VR智…

RocketMQ(模式详解,安装)及控制台安装

下载 环境 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8下载地址 https://rocketmq.apache.org/zh/download/ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 二进制包是已经编译完成后可以直接运行的&#xff0c;源码包是需要编译后运行的。 单…

LVS负载均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;负载均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;数据包的流向如下&#xff1a; 客户端发送请求到负载均衡器&#xff08;LVS&#xff09;的虚拟IP&#xff08;VIP&#xff09;。负载均衡器&#x…

基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

使用基于C的OpenCV库来绘制多边形&#xff0c;并且为多边形的不同边使用不同的颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 调度程序专业版,专业的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务&#xff0c;同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任…

BNC连接器市场分析:全球BNC连接器市场规模不断增长

产品定义及统计范围 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;连接器是一种通常用于视频和音频信号传输的电连接器。它是以其两位发明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他们在20世纪40年代末开发了这种连接器。BNC连接器是一种设计用于同轴电缆…

ansible 修改远程主机nginx配置文件

安装ansible brew install ansible 或者 pip3 install ansible 添加远程主机 设置秘钥 mac登录远程主机 ssh -p 5700 root192.168.123.211 ssh localhost #设置双机信任 ssh-kyegen -t rsa #设置主机两边的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地图插件

1、下载Uni插件项目 在Uni官网下载Uni插件项目&#xff0c;并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…

207. 课程表

思路 首先要完全理解题意&#xff0c;这道题的[a,b]并不是b满足了a就可以真正的学习a这门课了&#xff0c;因为a还有可能需要其他选修课的条件。类似下图。   这题的思路在于使用合适的数据结构来存储&#xff0c;这里用hash表来存储如果1这门课可以修了之后&#xff0c;可以…

docker pull 设置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 权限打开 text editor sudo gedit 注意 加引号 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

linux下shell编写软件看门狗

遇到一个问题&#xff0c;就是软件崩溃&#xff0c;可以让软件自动重启&#xff0c;而且数据库必须是软件崩溃之前的 #!/bin/sh while true do /app/app/record -qws cp -pr /msata/db/db_record.db /data/log/db_record.db mv /msata/db/db_record1.db /msata/db/db_record.d…

ubuntu20.04磁盘满了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

问题 执行 mysql 大文件导入任务&#xff0c;最后快完成了&#xff0c;查看结果发现错了&#xff01;悲催&#xff01;都执行了 两天了 The table ‘XXXXXX’ is full &#xff1f; 磁盘满了&#xff1f; 刚好之前另一个 centos 服务器上也出现过磁盘满了&#xff0c;因此&a…

神经网络基础-神经网络补充概念-30-搭建神经网络块

概念 搭建神经网络块是一种常见的做法&#xff0c;它可以帮助你更好地组织和复用网络结构。神经网络块可以是一些相对独立的模块&#xff0c;例如卷积块、全连接块等&#xff0c;用于构建更复杂的网络架构。 代码实现 import numpy as np import tensorflow as tf from tens…

LeetCode 38题:外观数列

题目 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1"countAnd…

Linux后门大全-inetd后门(一)

环境 靶机&#xff1a;Ubuntu 16.04.7 LTS &#xff08;最好使用相同的版本或更老的版本&#xff0c;inetd是非常老的系统服务管理工具&#xff09; 192.17.0.4 攻击机&#xff1a; 安装inetd apt update apt-get install openbsd-inetd #检查是否安装成功,如果文件存在就安…

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

《TCP IP网络编程》第十六章

第 16 章 关于 I/O 流分离的其他内容 16.1 分离 I/O 流 「分离 I/O 流」是一种常用表达。有 I/O 工具可区分二者&#xff0c;无论采用哪种方法&#xff0c;都可以认为是分离了 I/O 流。 2次 I/O 流分离&#xff1a; 第一种是第 10 章的「TCP I/O 过程」分离。通 shutdown(soc…

C++STL——deque容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…

el-form组件相关的一些基础使用

el-checkbox 01.description 多选单选框 02.场景举例 需要对每一条数据展示她的某些状态是否存在 03.代码展示 <el-checkbox v-model"query.isAutoAccptncsign" true-label1 false-label0 :disabled"ifReview?true:false">自动发起承兑应答</…