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

28、元组的遍历

const_cast 只能用于指针或引用类型,而不能用于基本类型如 int
在的代码中,试图将 i 转换为 const_cast<int>(i),这是不合法的。

可以使用模板函数来获取元组中的元素,而不是使用 const_cast。以下是修正后的代码:

#include <tuple>
#include <iostream>auto get_student(int id)
{// 返回类型被推断为 std::tuple<double, char, std::string>if (id == 0)return std::make_tuple(3.8, 'A', "张三");if (id == 1)return std::make_tuple(2.9, 'C', "李四");if (id == 2)return std::make_tuple(1.7, 'D', "王五");return std::make_tuple(0.0, 'D', "null");// 如果只写 0 会出现推断错误, 编译失败
}template <typename T>
auto tuple_len(T &tpl) {return std::tuple_size<T>::value;
}template <std::size_t I = 0, typename... Tp>
void print_tuple(const std::tuple<Tp...>& t)
{if constexpr (I < sizeof...(Tp)) {std::cout << std::get<I>(t) << " ";print_tuple<I + 1, Tp...>(t);}
}int main()
{auto student = get_student(0);std::cout << "ID: 0, "<< "GPA: " << std::get<0>(student) << ", "<< "成绩: " << std::get<1>(student) << ", "<< "姓名: " << std::get<2>(student) << '\n';std::cout << "学生信息: ";print_tuple(student);std::cout << '\n';return 0;
}/*
ID: 0, GPA: 3.8, 成绩: A, 姓名: 张三
====================================
3.8 A 张三
*/

在这个修正后的代码中,print_tuple 函数使用递归模板来打印元组中的所有元素。这样就避免了使用 const_cast,并且可以正确地打印元组中的所有元素。

http://www.xdnf.cn/news/929107.html

相关文章:

  • Redis :String类型
  • 第23讲、Odoo18 邮件系统整体架构
  • AIGC行业发展演进:从技术萌芽到智能革命
  • 全面解析:tzst 归档格式的先进性与跨平台文件管理指南
  • RTOS学习之重难点
  • go语言学习 第8章:切片
  • CMake检测C编译器标志功能
  • 基于51单片机的24小时倒计时仿真
  • CAN转PROFINET协议网关之PROFINET转CANfree组态秘诀
  • 10.接雨水
  • 九、【ESP32开发全栈指南: UDP通信服务端】
  • Redis 持久化机制深度解析
  • 反向传播的核心是什么:计算损失函数对可训练参数的梯度=== 损失函数能通过计算图连接到可训练参数
  • 打印高质量日志的10条军规
  • FPGA 可重构技术的实现方法
  • 技术有边界,责任无止境——AI伦理治理的未来挑战与全球路径
  • Welearn 課程時長半小時速刷200小時油猴腳本
  • 类与对象(1)
  • 物联网技术发展与应用研究分析
  • 技巧小结:根据寄存器手册写常用外设的驱动程序
  • 6.7-leetcodeT3170
  • 低成本嵌入式Linux开发方案:RV1106入门
  • 代码注释类型
  • 【win | 自动更新关闭】win11
  • 解决使用nvm安装node报错或者安装后有node没有npm
  • 基于投影寻踪博弈论-云模型的综合评价
  • 设计一套流程引擎队列分发器
  • 2025年AI编程工具推荐
  • 外部排序全解析:从基础到优化策略(王道)
  • go工具库:hertz api框架 hertz client的使用