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

C++17 异构(tuple)与多模态数据结构(variant)

C++17 提供了多种用于存储和处理不同类型数据的结构。
其中,std::variantstd::tuple 是最常用的两种异构容器,各有适用场景。


1️⃣ std::variant

概念

  • 类型安全的联合体,一次只能存储 一种类型
  • 适用于多模态数据、事件系统、消息队列等场景。
  • 模板参数可以有任意多个 不同类型(类型不能重复)。

示例

#include <variant>
#include <string>
#include <iostream>using MultiType = std::variant<int, double, std::string>;int main() {MultiType v;v = 42;       // intv = 3.14;     // doublev = "hello"s; // string
}

访问方式

  • std::get<T> / std::get<index> → 获取指定类型或索引的值
  • std::get_if<T> → 返回指针,类型不匹配返回 nullptr
  • std::visit → 根据当前存储类型执行逻辑(推荐)

2️⃣ std::tuple

概念

  • 异构类型容器(heterogeneous container)。
  • 一次可以存储 多个不同类型元素,每个元素类型固定。
  • 适合固定结构数据、函数多返回值、记录多字段信息。

示例

#include <tuple>
#include <string>
#include <iostream>int main() {std::tuple<int, double, std::string> t{42, 3.14, "hello"};std::cout << std::get<0>(t) << "\n"; // 42std::cout << std::get<1>(t) << "\n"; // 3.14std::cout << std::get<2>(t) << "\n"; // hello// 使用结构化绑定auto [i, d, s] = t;
}

特点

  • 每个元素同时存在,类型在编译期确定
  • 是典型的 异构/异形容器

3️⃣ std::variant 与 std::tuple 对比

维度std::variantstd::tuple
存储数量单值,类型可变多值组合,类型固定
类型变化运行时可切换编译期固定
用途多模态单值、事件系统多返回值、固定结构数据
访问方式std::get / std::visitstd::get / 结构化绑定

一句话理解

  • variant = 单位置,多模态单值
  • tuple = 多位置,固定结构组合
http://www.dtcms.com/a/569502.html

相关文章:

  • 【SpringBoot】玩转 Spring Boot 日志:级别划分、持久化、格式配置及 Lombok 简化使用
  • 火山引擎数智平台VeDI重磅发布“AI助手”:以大模型驱动数据飞轮,赋能非技术人员高效“看数、用数”
  • 前言:可视化搭建诞生背景 什么是可视化
  • 个人博客网站怎么注册网站怎么做会员系统
  • 山东省建设厅招标网站首页c可以做网站吗
  • 【Solidity 从入门到精通】第3章 Solidity 基础语法详解
  • 【仓颉纪元】仓颉实战深度复盘:21 天打造鸿蒙天气应用
  • Idea(2023版)使用Svn
  • windows SVN 修改提交作者、提交注释、提交日期
  • 网站空间购买哪家好wordpress 字体颜色
  • 网站定制哪个好建筑模板厚度一般是多少
  • 专门型网站wordpress无法设置语言包
  • 在windows下使用vscode进行cuda编程
  • 复变函数与积分变换 第一章——复数与复变函数
  • 告别预训练:清华大学πRL实现机器人“在实践中进化”的通用解决方案
  • U8/发票请款未发现符合条件的单据
  • 本地赣州网站建设ui界面设计案例分析
  • 【生成模型(一)】Score-Based Generative Models
  • Erasmus Glioma Database (EGD)数据集下载
  • FeatEnHancer:在低光视觉下增强目标检测及其他任务的分层特征
  • 网站建设流程及构架郑州网站建设推广渠道
  • QuickData
  • 和网站开发公司如何签合同world做网站怎么做连接
  • AIGC中stable-diffusion安装部署
  • 飞腾D3000自带10G网卡调试
  • git简介和常用方法
  • Java114 LeeCode 翻转二叉树
  • 网站建设优化托管如何给网站添加cnzz
  • 免费物流公司网站模板小程序定制开发团队
  • 曙光超算-VASPkit教程