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

实现Variant

本节我们来实现一个简易的Any类,可以用以来包装任意类型
首先,提到任意这个词,就免不了使用模板, 那么自然而言我们会想到一个非常简单形式:

template<typename T>
struct Any
{Any(const T& val) : _val(val){}T _val;
};

这样就实现了一个最简单的,可以包装任意类型的模板类,于是,可以这样来使用

	Any<int> x (10);Any<double> y (2.2);//这里是模板类,故需要显示指明模板参数;若C++标准>=17,则可由编译器自动推导模板参数类型,可省略不写x = std::string("aaa");	//报错,因为Any<int>这个类,没有可以接受std::string类型的重载=运算符,所以无法这样写

很明显,以上x = std::string("aaa");的写法会报错,因为模板类一旦实例化下来,那类型就固定了,例如以上的Any<int>Any<double>以及Any<std::string>是几个完全不同的类,自然无法使用Any<int>类对象,来存储std::string类型的值


那么该如何才能让一个Any类,既可以存储int,也可以存储doublestd::string类型的值呢?

显然Any一定不能是一个模板类,否则就像上面一样,失去了在运行时动态切换数据类型的能力;那么可以这样将模板类型隐藏起来:

struct Any
{template<typename T>Any(const T& val) : _val(val){}};
http://www.xdnf.cn/news/123409.html

相关文章:

  • Ubuntu中选择Python虚拟环境
  • 仿真每日一练 | ABAQUS应力松弛
  • 【Java 数据结构】泛型
  • golang的cgo的一点小心得
  • 智能电网第5期 | 老旧电力设备智能化改造:协议转换与边缘计算
  • Spring Boot默认缓存管理
  • 第J5周:DenseNet+SE-Net实战
  • 手机端本地服务与后端微服务的技术差异
  • 模板元编程(Template Metaprogramming, TMP)
  • Redis 完整配置模板
  • 【UML建模】starUML工具
  • 房地产安装工程师简历模板
  • BBRv2,v3 吞吐为什么不如 BBRv1
  • Python元组全面解析:从基础到高级应用指南
  • AI文生图模型对比
  • 详解数据存储中的端到端数据校验技术
  • .NETCore部署流程
  • Caffeine 深度解析:从核心原理到生产实践
  • 保安员理论考试要点总结
  • 如何初入学习编程包含学习流程图
  • 多路转接epoll原理详解
  • SLAM常用地图对比示例
  • OSI七层模型和TCP/IP四层模型
  • Kotlin函数体详解:表达式函数体 vs 代码块函数体——使用场景与最佳实践
  • 安全生产知识竞赛活动方案流程规则
  • 西甲001:奥萨苏纳VS塞维利亚
  • 系统高性能设计核心机制图解:缓存优化、链表调度与时间轮原理
  • SSH 反向隧道访问内网服务
  • 容器修仙传 我的灵根是Pod 第9章 时空禁术(Job与CronJob)
  • gitlab-ce容器镜像源(国内)