当前位置: 首页 > 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){}};

相关文章:

  • AI赋能Python长时序植被遥感动态分析、物候提取、时空变异归因及RSEI生态评估
  • 系统高性能设计核心机制图解:缓存优化、链表调度与时间轮原理
  • 白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证
  • 麒麟系统离线安装软件方法(kazam录屏软件为例)
  • SEO的关键词研究与优化 第一章
  • AI | 最近比较火的几个生成式对话 AI
  • YOLO训练时到底需不需要使用权重
  • 【AI提示词】私人教练
  • 昆仑万维开源SkyReels-V2,解锁无限时长电影级创作,总分83.9%登顶V-Bench榜单
  • 使用正确的 JVM 功能加速现有部署
  • Kaamel视角下的MCP安全最佳实践
  • python-69-基于graphviz可视化软件生成流程图
  • 文件操作、流对象示例
  • 用 Python 实现基于 Open CASCADE 的 CAD 绘图工具
  • 碰一碰发视频源码文案功能,支持OEM
  • VulnHub-DC-2靶机渗透教程
  • 编译型语言、解释型语言与混合型语言:原理、区别与应用场景详解
  • 【C++】STL之deque
  • flutter 中各种日志
  • 无感字符编码原址转换术——系统内存(Mermaid文本图表版/DeepSeek)
  • 政治局会议:积极维护多边主义,反对单边霸凌行径
  • 文昌市委原书记龙卫东已任海南省人社厅党组书记
  • “80后”李岩已任安徽安庆市领导
  • 限时离境、关闭领空、暂停贸易,巴基斯坦宣布一系列对印反制措施
  • 科普|结石疼痛背后的危机信号:疼痛消失≠警报解除
  • 广州远洋宾馆负一层配电房发生火情:明火已扑灭,无人员伤亡