【C++】可变参数模板

2023-11-06

2023年9月9日,周六下午

这个还是挺难学的,我学了好几天...

在这里我会举大量的示例程序,这样可以有一个更好的理解,

不定期更新。


目录

推荐文章:

示例程序一:拼接字符串

示例程序二:求整数和

示例程序三:输出一串整数


推荐文章:

这里有一些不错的相关文章 

Parameter pack(since C++11) - cppreference.com

Variadic function templates in C++ - GeeksforGeeks

Variadic templates in C++ - Eli Bendersky's website

在谷歌搜索“Variadic Template”就可以找到更多这样的文章

示例程序一:拼接字符串

#include <iostream>
#include <string>
using namespace std;


template<typename... Args>
string concatenate(Args... args) {
    string result;
    for (const auto& arg : {args...}) {
        result += arg;
    }
    return result;
}

int main() {
    cout << concatenate("Hello", " ", "world", "!") << endl; // 输出:Hello world!
    return 0;
}

示例程序二:求整数和

#include <iostream>
using namespace std;

template<typename... Args>
int sum(Args... args){
	int sum=0;
	for(const int& arg:{args...})
		sum+=arg;
	return sum;
}

int main() {
    cout <<sum(1,2,3,4,5,6,7,8,9,10) << endl; // 输出:55
    return 0;
}

示例程序三:输出一串整数

示例程序一和二是通过遍历的方式,而这个示例程序是通过递归的方式。

使用递归的方式时要注意,递归到最后时函数的参数是空的,

所以要准备额外准备好一个函数来处理这种情况。

#include <iostream>
using namespace std;

void print()
{
	cout << "最后一个元素"<<endl;
}

template <typename T, typename... Args>
void print(T first, Args... args)
{
	cout << first << endl;

	print(args...);
}

int main()
{
	print(1, 2, 3,4,5,6,7);

	return 0;
}

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

【C++】可变参数模板 的相关文章

  • C++:如何检测向量中的重复项并打印一份副本?

    我是 C 新手 我想知道如何在向量中找到重复的字符串并打印出该字符串的一个副本 例如 如果我有它会打印出cat dog bird 我已经对我的向量进行了排序 并使用adjacent find函数并迭代该向量 因为我必须查找是否有任何单词重复
  • 为什么我的 C#/pinvoke DeviceIoControl 调用返回 0 字节读取的垃圾数据?

    我有一个运行良好的非托管 C Windows 控制台应用程序 我想要它在 C 中 我已经为必要的 Kernel32 dll 符号完成了 DllImport 语句 StructLayout LayoutKind Sequential inte
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • 在 C++ 中,当我将值传递给函数时,它是否总是转换为适当的类型?

    如果我有一个像这样的函数void func size t x 我称该函数为func 5 5 立即转换为size t类型 这通常适用于所有类型吗 我问这个问题是因为我发誓我见过人们编写代码 他们做类似的事情func 5 0 将 5 作为双精度
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

    你好 我有一个非常简单的网络表单 我在此表单上有一个按钮和一个网格视图 以及一个包含链接表 bill docket docket bill 等的数据集 在按钮上单击我使用以下代码 protected void button click ob
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 在 C++ 中初始化指针

    可以在声明时将指针分配给值吗 像这样的东西 int p 1000 是的 您可以在声明时初始化指向值的指针 但是您不能这样做 int p 1000 是个地址运算符 并且您不能将其应用于常量 尽管如果可以 那会很有趣 尝试使用另一个变量 int
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • C++ 项目编译为静态库,编译为动态库失败(链接器错误)。为什么?

    我有一个 VS2008 本机 C 项目 我希望将其编译为 DLL 它仅引用一个外部库 log4cplus lib 并使用其功能 当然也使用 log4cplus 的 h 文件 当我尝试将我的项目编译为静态库时 它成功了 当我尝试作为 DLL
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 使用 Crypto++ 和 .NET 的 CFB 模式下的 TripleDES

    我正在尝试使用 TripleDES 使用 C 应用程序获得相同的结果 该应用程序具有Crypto https www cryptopp com 和 NET应用程序使用三重DESCryptoServiceProvider https msdn
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许

随机推荐

  • 服务器响应的jsp文件,JSP服务器响应

    JSP服务器响应 Response响应对象主要将JSP容器处理后的结果传回到客户端 可以通过response变量设置HTTP的状态和向客户端发送数据 如Cookie HTTP文件头信息等 一个典型的响应看起来就像下面这样 HTTP 1 1
  • OpenSceneGraph-OpenSceneGraph-3.6.5源码编译

    前言 准备 git 不是必须 使用git得到的源码是3 6 5版本的 CMake vs2019 VS017可以 我这里用的vs2019 osg主页 源码下载 Cmake编译源码 编译报错 CMake Warning dev at F Pro
  • SDWebImage 笔记

    SDWebImage托管在github上 https github com rs SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片 具有缓存管理 异步下载 同一个URL下载次数控制和优化等特征 使
  • A股上市有什么条件?A股上市条件有哪些?

    A股的上市条件有这几点 一 资格要求 1 发行人应当是依法设立且合法存续的股份有限公司 经国务院批准 有限责任公司在依法变更为股份有限公司时 可以采取募集设立方式公开发行股票 2 发行人自股份有限公司成立后 持续经营时间应当在3年以上 但经
  • 【Web架构】使用 JSON API 的好处

    在 API 工艺的世界里 没有比设计更受热议的领域了 从 REST gRPC 到 GraphQL 有许多方法可以设计和标准化 Web API 交互 今天 我们将注意力转向另一种方法 JSON API JSONAPI org 上详细介绍的用于
  • java字符数组初始化_Java 字符串(一)字符串初始化

    一 String类概述 1 概述 java lang String类代表字符串 Java程序中所有的字符串文字 例如 abc 都可以被看作是实现此类的实例 String 是引用数据类型 不是基本数据类型 类String 中包括用于检查各个字
  • CVE-2021-30116: Kaseya VSA 远程代码执行漏洞通告

    报告编号 B6 2021 070601 报告来源 360CERT 报告作者 360CERT 更新日期 2021 07 06 0x01 漏洞简述 2021年07月06日 360CERT监测发现Kaseya发布了VSA管理软件的风险通告 漏洞等
  • 春秋云镜靶场挑战——Tsclient

    目标IP 39 98 73 212 网络拓扑 入口机器 1 使用namp对目标IP进行扫描 发现目标开放了1433端口 MSSQL服务 3389端口 RDP服务 2 可以先爆破MSSQL服务 如下可以看出成爆破出密码 3 使用MDUT工具连
  • Leetcode168. Excel表列名称

    力扣 LeetCode 官网 全球极客挚爱的技术成长平台 题解 力扣 LeetCode 官网 全球极客挚爱的技术成长平台 代码如下 class Solution public String convertToTitle int column
  • 【华为机试题解】奥特曼打怪兽

    大概题意 在一个N N的正方形区域 每个小格可能有三种状态 值为0 正常可通过 值为1 奥特曼可通过 同时还可以消灭怪兽 消灭后值变为0 消灭怪兽数量 1 值为 1 有大石头 奥特曼无法通过 奥特曼需要先从上往下走 这个过程只能向下或者向右
  • 正则表达式替换多个相同的连续字符串为一个字符串

    要替换的字符串 http localhost 9010 asqmasqm manage user 需要替换多个连续asqm为一个asqm 正则表达式 asqm 1 g 1 替换结果为 http localhost 9010 asqm man
  • Fedora 17 安装 ACE6.1

    下载 下载地址 http download dre vanderbilt edu 下载ACE 6 1 0 tar bz2 这个软件包只包含ACE 不包含TAO等附加的东西 另外bz2压缩格式的源码包比较小 只有7 55M 解压 mkdir
  • 若依 vue webpack 打包 tomcat部署 刷新404 问题处理思路

    1 参考若依官网中的添加WEB INF方法 若依文档说明 2 检查 vue config js中的生产环境配置 检查publicPath中的路由地址是否为tomcat中的前端路径 例如tomcat 的访问路径是localhost 8080
  • wpsppt设置页码和总页数_wps的ppt页码怎么设置

    wps的ppt页码怎么设置 PPT中如何设置页码那 你知道吗 下面是小编为大家推荐wps的ppt页码设置的内容 希望能够帮助到你 欢迎大家的阅读参考 设置步骤 新建一个PPT 选择 离子 模板 然后猛敲回车 插入多张PPT页面 点击 插入
  • SpringBoot 添加对JSP的支持(附常见坑点)

    序言 SpringBoot默认不支持JSP 如果想在项目中使用 需要进行相关初始化工作 为了方便大家更好的开发 本案例可直接作为JSP开发的脚手架工程 SpringBoot War JSP 常见问题 1 修改JSP需重启才能生效 在生产环境
  • Pycharm 使用pip安装包时候报错 no such option --build-dir

    Pycharm 使用pip安装包时候报错 no such option build dir 原因 pip版本过高 解决办法 对pip降级 等待pycharm更新即可 打开命令行 找到python所在的位置 输入 pip install pi
  • Qt中调用C#制作的com组件

    作者 billy 版权声明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 前言 这里记录一下在 Qt 64位程序中调用 C 制作的 com 组件的流程 方便后期自己回顾 1 了解 TLB 格式 拿到的依赖库最重要的有一
  • c++四舍五入函数,向上取整,向下取整函数

    对含有小数点的数进行四舍五入是比较普遍的一种需求 在C 中也有类似的取整函数 在C 的头文件中有floor 和ceil 函数 在STL中还有round 函数 向下取整 floor 向上取整ceil 四舍五入取整round
  • 计算机需要解决的基本问题是,【基本计算机问题】计算机不是遇到非常严重的问题,请看这里解答...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 5 启动计算机时出现 Invalid Boot ini 无效 Boot ini 或 Windows could not start Windows 无法启动 错误信息 Invalid Boot
  • 【C++】可变参数模板

    2023年9月9日 周六下午 这个还是挺难学的 我学了好几天 在这里我会举大量的示例程序 这样可以有一个更好的理解 不定期更新 目录 推荐文章 示例程序一 拼接字符串 示例程序二 求整数和 示例程序三 输出一串整数 推荐文章 这里有一些不错