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

std::any详解

基础概念

std::any是一个可以存储任意类型的数据类型安全的容器,它的特点是主要是:

  1. 可以存储任意类型的单个值
  2. 在运行时保持类型安全
  3. 需要显示的类型转化才能取出值

依赖的头文件:#include <any>

基本用法

#include <any>
#include <iostream>
#include <string>

int main()
{
    //基本构造和赋值
    std::any a1;
    std::any a2 = 42;
    std::any a3 = std::string("hello");

    //使用make_any构造
    auto a3 = std::make_any<std::string>("world");
    
    //检查是否为空
    std::cout <<"是否为空:"<<std::boolalpha<<a1.has_value()<<std::endl;

    //获取存储值的类型信息
    std::cout <<"a2的类型信息:"<<a2.type().name()<<std::endl;

    //获取值
    int value = std::any_cast<int>(a2);  //必须使用any_cast<T>显式的转换
    std::cout <<"a2的值:"<<value<<std::endl;  

    return 0;

}

错误的用法

假设std::any存储的数据类型是整型,但是却通过std::any_cast<T>却强转为其它类型,那么就会抛出异常,请看下面的例子:

void error_example()
{
        try {
        std::any number = 42;
        
        // 错误的类型转换
        std::string str = std::any_cast<std::string>(number);
    }
    catch(const std::bad_any_cast& e) {
        std::cout << "类型转换失败: " << e.what() << "\n";
    }

}

使用建议

  1. 当需要存储未知类型的数据时使用
  2. 如果类型集合是已知的,考虑使用 std::variant
  3. 注意异常处理
  4. 合理使用类型检查和转换机制

相关文章:

  • Java实现死锁
  • 【沐渥科技】氮气柜日常如何维护?
  • nginx 打造高性能 API 网关(‌Building a High-Performance API Gateway with Nginx)
  • Deepin通过二进制方式升级部署高版本 Docker
  • 数据库系统概论(四)关系模型的数据结构及形象化
  • 【eNSP实战】交换机配置端口隔离
  • 软件IIC和硬件IIC的主要区别,用标准库举例!
  • wpf label 内容绑定界面不显示
  • MVCC实现原理
  • 【JavaWeb学习Day24】
  • 基于python下载ERA5小时尺度和月尺度的数据
  • 【Java开发指南 | 第三十四篇】IDEA没有Java Enterprise——解决方法
  • [从零开始学习JAVA] 新版本idea的数据库图形化界面
  • JVM RuntimeDataArea 成分
  • libwebsockets实现异步websocket客户端,服务端异常断开可重连
  • LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION
  • Aliyun CTF 2025 web ezoj
  • 云原生容器编排:Kubernetes的架构演进与实践
  • python中time模块的常用方法及应用
  • 蓝桥杯2024年第十五届省赛真题-成绩统计
  • 降水较常年同期少五成,安徽四大水利工程调水超11亿方应对旱情
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力
  • 梅花奖在上海|舞剧《朱鹮》,剧里剧外都是生命的赞歌
  • “三个集中”之后:图说浦东新区28次撤乡并镇
  • “异常”只停留在医院里,用艺术为“泡泡宝贝”加油
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”