当前位置: 首页 > 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,并且可以正确地打印元组中的所有元素。

相关文章:

  • XXL-JOB——源码分析解读(1)
  • 勒让德多项式
  • yolov11与双目测距结合,实现目标的识别和定位测距(onnx版本)
  • 求解插值多项式及其余项表达式
  • 5.3.2_2二叉树的线索化
  • 第5章:Cypher查询语言进阶
  • 运动控制系统 数控系统 激光切割和焊接系统的特点相同点交叉侧重点
  • 指针的定义与使用
  • Java方法引用深度解析:从匿名内部类到函数式编程的演进
  • 基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真+程序+设计报告+讲解视频
  • Bugku-CTF-Web安全最佳刷题路线
  • Python: 告别 ModuleNotFoundError, 解决 pipx 环境下 sshuttle 缺少 pydivert 依赖的终极指南
  • Cloudflare 免费域名邮箱 支持 Catch-all 无限别名收件
  • 【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
  • 并发编程实战(生产者消费者模型)
  • 构建智能对话式BI的关键:ChatBI场景下的Agent框架选型深
  • 电脑商城--用户注册登录
  • Object.assign() 和扩展运算符(...)
  • 汇编语言学习(三)——DoxBox中debug的使用
  • Golang基础学习
  • 做动态网站 和数据库交互/软文发稿网站
  • 江门企业免费建站/小程序定制开发公司
  • 优秀个人网站设计/怎么上百度搜索
  • 知名高端网站建设服务商/免费换友情链接
  • 内部优惠券网站建站/营销自动化工具
  • 自己做网站需要什么材料/线上推广产品