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

C++可变参数模板

在python中,支持可变参数作为函数形参,这是一项很好的功能(代码段1),那么在C++中有没有这样的方式支持可变参数呢。这里提供两种实现方式以供参考。其中方式1支持多种类型可变参数输入,方式2更简洁,但是不支持多种参数类型输入。

python中可变参数:

def average(*x):if len(x) == 0:return 0return sum(x) / len(x)x1,x2,x3,x4=map(eval,input().split())
b=average(x1,x2)
print('两个数平均值为:{:.2f}'.format(b))
b=average(x1,x2,x3)
print('三个数平均值为:{:.2f}'.format(b))
b=average(x1,x2,x3,x4)
print('四个数平均值为:{:.2f}'.format(b))

C++中可变参数实现1:
使用递归+可变参数模板展开
这里之所以定义两个可变参数是为了每次递归展开可变参数包中第一个,剩余在后续递归展开。也就是为了防止程序无限递归

//C++11
template<typename T, typename... Args>
double average(T first, Args... args) {return (first + (sizeof...(args) * average(args...))) / (sizeof...(args) + 1);
}


C++中可变参数实现2:

使用初始化列表,这种方式更为简洁,但是不适用于不同类型参数。

double average(std::initializer_list<double> numbers) {if (numbers.size() == 0) return 0.0;double sum = 0.0;for (double num : numbers) {sum += num;}return sum / numbers.size();
}

http://www.dtcms.com/a/507158.html

相关文章:

  • Python下载实战技巧的技术文章大纲
  • PostgreSQL高级特性解析:窗口函数与CTE
  • OpenBMC: BmcWeb处理WebScoket2 产生WebSocket对象
  • 构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性
  • 图论基础:探索节点与关系的复杂网络
  • 免费建网站 建站之星百度指数免费添加
  • python如何写数据到excel示例
  • Spring Cloud - Spring Cloud 注册中心与服务提供者(Spring Cloud Eureka 概述、微服务快速入门、微服务应用实例)
  • 测试经验分享,登录功能+购物车+限时秒杀(测试点)汇总
  • 腾讯云TVP走进美的,共探智能制造新范式
  • OpenAI 的 Sora 2来了:一场创意革命与失控的狂欢
  • 直播预告 | 时序数据赋能核电数字化转型,TDengine 引领创新新范式
  • 动漫网站建设规划书模板广州网站建设策划
  • 使用imapsync增量同步邮件到新邮局服务器
  • iOS 混淆与 IPA 加固全流程,多工具组合实现无源码混淆、源码防护与可审计流水线(iOS 混淆|IPA 加固|无源码加固|App 防反编译)
  • java数据结构--ArrayList与顺序表
  • 【IEEE/EI/Scopus检索】2026年IEEE第七届计算,网络与物联网国际会议(CNIOT 2026)
  • 大数据计算引擎-Hudi对Spark Catalyst 优化器的RBO、CBO做了什么
  • 设计模式之:建造者模式
  • 阿里云 RDS MySQL 可观测性最佳实践
  • 【含文档+PPT+源码】基于spring boot的固定资产管理系统
  • 企业门户网站建设新闻柳州seo培训
  • 广东长海建设工程有限公司网站众筹网站建设报价
  • 航运、应急、工业适用,AORO P1100三防平板引领行业数字化变革
  • Linux网络:UDP
  • vue3知识点-ref和reactive以及toRefs与toRef
  • 环保网站 源码wordpress展示页
  • NSSCTF - Web | 【第五空间 2021】pklovecloud
  • 了解“网络协议”
  • ECharts 实时数据平滑更新实践(含 WebSocket 模拟)