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

c++实现Any类,让一个类型指向其他任意类型

  在c++中,对于以上任务,容易想到的是一个基类类型指向其所有派生类。因此设计一个Any类,其里面有一个成员基类Base类,其派生类可以是数据date,但是你不知道date到底是什么东西,所以需要使用模版。所以其结构为:

class Any
{
private:class Base{public:virtual ~Base() = deafult;	}template<typename T>class Derive: public Base{public:Derive(T data):m_data(data);T m_data;}
private:std::unique_ptr<Base> m_base; 
}

  之后将数据赋值给Any类。以下如下:

Any(T data):m_base(std::make_unique<Derive<T>>(data)){}

  还需要一个public公有函数将数据类型取出来。

template<typename T>
T cast_()
{Derive<T>* pd = dynamic_cast<Derive<T>*>(m_base.get());if(pd == nullptr){throw "数据类型不匹配"}return pd->m_data;
}

完整代码:

class Any
{
public:Any() = default;~Any() = default;Any(const Any&) = delete;Any& operator=(const Any&) = delete;Any(Any&&) = default;Any& operator=(Any&&) = default;//模版构造函数,可以接受任意类型数据,并将其存储在派生类当中template<typename T>Any(T data) :m_base(std::make_unique<Derive<T>>(data)){}template<typename T>T cast_(){//通过dynamic_cast将基类指针转化为派生类,进而获取数据Derive<T>* pd = dynamic_cast<Derive<T>*>(m_base.get());//m_base.get()返回指向base类对象的原始指针if (pd == nullptr){throw "type is unmatch";}return pd->m_data;}
private:class Base{public:virtual ~Base() = default;};template<typename T>class Derive : public Base{public:Derive(T data) :m_data(data) {}T m_data;};
private:std::unique_ptr<Base> m_base;
};
http://www.lryc.cn/news/234824.html

相关文章:

  • os.path.join函数用法
  • vscode Prettier配置
  • MLC-LLM 支持RWKV-5推理以及对RWKV-5的一些思考
  • WPF中行为与触发器的概念及用法
  • 2023-2024华为ICT大赛-计算赛道-广东省省赛初赛-高职组-部分赛题分析【2023.11.18】
  • 『 MySQL数据库 』数据库之表的约束
  • flink 8081 web页面无法被局域网内其他机器访问
  • 零基础安装分布式数据服务注册系统
  • 2023最新最全【OpenMV】 入门教程
  • 【Java并发编程三】线程的基本使用一
  • 企业邮箱认证指南:安全与高效的邮箱认证方法
  • Django(八、如何开启事务、介绍长见的字段类型和参数)
  • 机器学习第5天:多项式回归与学习曲线
  • MSYS2介绍及工具安装
  • Swift开发中:非逃逸闭包、逃逸闭包、自动闭包的区别
  • 栈结构应用-进制转换-辗转相除法
  • 【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer
  • idea 环境搭建及运行java后端源码
  • 掌握Shell:从新手到编程大师的Linux之旅
  • 有重复元素的快速排序
  • Bert浅谈
  • 产品运营的场景和运营策略
  • C#异常捕获try catch详细介绍
  • 切换阿里云ES方式及故障应急处理方案
  • CTFhub-RCE-过滤空格
  • 无需添加udid,ios企业证书的自助生成方法
  • 【PTA题目】6-20 使用函数判断完全平方数 分数 10
  • Nas搭建webdav服务器并同步Zotero科研文献
  • 一句话总结敏捷实践中不同方法
  • 【数据结构】线段树(点修区查)