可变参数模板--案例4(支持多个参数的max函数)

本文通过一个具体的示例介绍了如何使用可变模板参数来实现一个能够处理多个输入参数的max函数。该方法允许函数接受任意数量的参数,并找出其中的最大值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在案例3中,我们使用initializer_list可以实现支持多个参数的max函数。下面我们将使用可变参数模板实现。

上代码:

/*******************************************
* Name:      example.cpp
* Describe:  可变模板参数实例5
* Author:    SSCOCA
* Version:   1.00
* Date:      2018年8月9日
* Other:
*********************************************/
template<typename T>
T max(T val1, T val2){
    return val1 > val2 ? val1 : val2;
}

template<typename T, typename... Args>
T max(T val, Args... arg){
    T result = max(arg...);
    return max(val, result);
}

void main4(){
    double num = max(1.0, 2.0, 35.0, 7.0);
}

# 定义函数 """ def 函数(参数1, 参数2): 执行代码... return 返回值 # 可选 # 调用函数 # 无参数函数 函数(值1, 值2) """ # 定义无函数 def show_welcome(): """显示欢迎信息""" print("🌟 欢迎使用自动化测试系统 🌟") print("请选择测试模块...") # 调用函数 show_welcome() #有函数 # 计算测试用例执行时间 def calc_exec_time(case_count, avg_time): """计算总执行时间""" total_time = case_count * avg_time return round(total_time, 2) # 保留2位小数 # 调用函数 time = calc_exec_time(50, 1.8) print(f"总执行时间: {time}分钟") # 输出: 总执行时间: 90.0分钟 #位置参数 def create_user(name, age, role): print(f"创建用户: {name}({age}岁), 角色:{role}") # 必须按顺序传递 create_user("张三", 25, "测试工程师") # ✅ 正确 create_user(25, "测试工程师", "张三") # ❌ 顺序错误! #关键字参数 create_user(role="管理员", name="李四", age=30) # 输出: 创建用户: 李四(30岁), 角色:管理员 #默认参数 def connect_db(ip, port=3306, user="admin", pwd="123456"): print(f"连接数据库: {ip}:{port} 用户:{user}") connect_db("192.168.1.100") # 使用默认port/user/pwd connect_db("10.0.0.1", port=5432) # 覆盖部分默认值、 #函数返回值 def analyze_data(data): """分析测试数据""" min_val = min(data) max_val = max(data) avg_val = sum(data)/len(data) return min_val, max_val, avg_val # 返回元组(min, max, avg) # 接收返回值 results = analyze_data([8.2, 7.5, 9.1, 6.7]) print(results) print(f"最小值:{results[0]}, 最大值:{results[1]}, 平均值:{results[2]:.2f}") """ 参数类型 特点 示例 位置参数 按定义顺序传递 func(a, b) 关键字参数 指定参数名传递,顺序可 func(b=2, a=1) 默认参数 定义时赋予默认值 def func(a, b=5) 位置参数 > 关键字参数 > 默认参数 """ #三类参数 def report_bug(bug_id, severity="P2", assignee="测试组"): """提交缺陷报告""" print(f"[ID:{bug_id}] 严重度:{severity} 负责人:{assignee}") # 调用方式: print(report_bug("BUG-2024-001")) # 位置参数 → [ID:BUG-2024-001] 严重度:P2 负责人:测试组 report_bug(severity="P1", bug_id="BUG-2024-002") # 关键字参数 → [ID:BUG-2024-002] 严重度:P1 负责人:测试组 #可变参数(*args和**kwargs) # *args:可位置参数(接收任意数量位置参数) def calculate_avg(*scores): """计算任意数量测试成绩的平均分""" total = sum(scores) return total / len(scores) if scores else 0 # 调用示例 print(calculate_avg(85, 90, 78)) # 输出: 84.333 print(calculate_avg(95, 88)) # 输出: 91.5 print(calculate_avg(100)) # 输出: 100.0 # **kwargs:可关键字参数(接收任意数量键值对) def test_login(**credentials): """测试登录功能,支持不同参数组合""" # 1. 提取必要参数(带默认值) username = credentials.get("username", "admin") # 默认用户名 password = credentials.get("password", "123456") # 默认密码 # 2. 打印动态参数 print(f"测试登录: 用户名={username}, 密码={password}") # 3. 处理可选参数 if "captcha" in credentials: print(f"验证码: {credentials['captcha']}") if "remember_me" in credentials: print("✅ 记住登录状态") # 调用示例 test_login() # 使用默认参数 test_login(username="tester", password="p@ssw0rd") # 基础登录 test_login(username="user", captcha="AX9Y", remember_me=True) # 带验证码和记住我 # 组合使用 *args 和 **kwargs def run_test(test_name, *test_data, **config): """执行测试用例(带配置参数)""" print(f"\n执行测试: {test_name}") print(f"测试数据: {test_data}") print(f"浏览器: {config.get('browser', 'Chrome')}") print(f"超时: {config.get('timeout', 30)}秒") # 调用示例 run_test("搜索功能", "Python教程", "API文档") run_test("支付功能", "信用卡", "余额支付", browser="Firefox", timeout=45, env="staging") # 参数顺序规则(必须遵守) def valid_order(a, b, *args, c=10, **kwargs): """展示正确的参数顺序""" print(f"a={a}, b={b}, args={args}, c={c}, kwargs={kwargs}") # 正确调用 valid_order(1, 2, 3, 4, c=20, d=5, e=6) # a=1,b=2,args=(3,4),c=20,kwargs={'d':5,'e':6} # 错误调用(将导致语法错误) # def invalid_order(a, **kwargs, *args): # ❌ 语法错误 # def invalid_order(a, **kwargs, b): # ❌ 语法错误 #1. 基础异常捕获 def divide(x, y): try: result = x / y except ZeroDivisionError: # 捕获特定异常 print("错误:除数不能为0!") else: # 无异常时执行 return result print(divide(10, 2)) # 输出: 5.0 print(divide(10, 0)) # 输出: 错误:除数不能为0! #多异常处理 def parse_user_input(input_str): try: num = int(input_str) # 可能触发ValueError if num < 0: raise ValueError("输入不能为负数") # 主动抛出异常 except ValueError as ve: # 捕获值错误 print(f"输入错误: {ve}") except Exception as e: # 捕获其他所有异常 print(f"未知错误: {e}") finally: # 无论是否异常都会执行 print("处理完成") parse_user_input("abc") # 输入错误: invalid literal for int()... parse_user_input("-5") # 输入错误: 输入不能为负数 def add(a, b): """加法运算""" return a + b def subtract(a, b): """减法运算""" return a - b def multiply(a, b): """乘法运算""" return a * b def divide(a, b): """除法运算,处理除数为零的情况""" if b == 0: return "错误:除数不能为零!" return a / b def calculator(): """主计算器函数""" print("🌟 简易四则运算计算器 🌟") while True: print("\n请选择操作:") print("1. 加法") print("2. 减法") print("3. 乘法") print("4. 除法") print("5. 退出") choice = input("输入你的选择 (1/2/3/4/5): ") # 退出条件 if choice == '5': print("感谢使用,再见!") break # 验证选择有效性 if choice not in ['1', '2', '3', '4']: print("无效的选择,请重新输入!") continue # 获取操作数 try: num1 = float(input("请输入第一个数字: ")) num2 = float(input("请输入第二个数字: ")) except ValueError: print("输入错误,请输入有效的数字!") continue # 执行计算并显示结果 if choice == '1': result = add(num1, num2) print(f"{num1} + {num2} = {result}") elif choice == '2': result = subtract(num1, num2) print(f"{num1} - {num2} = {result}") elif choice == '3': result = multiply(num1, num2) print(f"{num1} × {num2} = {result}") elif choice == '4': result = divide(num1, num2) print(f"{num1} ÷ {num2} = {result}") calculator() 优化下这个文件,不适合0基础的同学
最新发布
08-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值