std::any的实现

前言

学习自用,帮助理解,有错麻烦提一下,代码没跑过,想着知道大概思想就好..

问题

  • 为什么不用类型推断,类型推断又是什么TODO

  • 类型擦除怎么实现的,用类的继承来实现的,为什么类的继承可以实现?

    基类是不含模板参数的,派生类中才有模板参数,这个模板参数类型正是赋值的类型,在赋值时,将创建的派生类对象赋值给基类指针,基类的派生类中携带了数据类型,基类只是原始数据的一个占位符,通过多态,它擦除了原始数据类型,因此,任何数据类型都可以赋值给他,从而实现了能存放所有类型数据的目标

正文:std::any的实现

要用一个容器,可以装所有类型

  • Q:为什么不直接用void*

  • A:因为类型不安全

any类的API应该是:

  1. 初始化Any a(1);和Any b("字符串")

  2. 转换a.convert(std::string);即any_cast

这样是没有声明类型的,因为也不知道传过来的是什么类型,

用模板来定义,

template<typname ValueType>
class Any{
    Any(ValueType value);//构造函数
    NoType _content;//数据内容,这里应该定义成什么类型呢
    Any& operator=(ValueType);
}

这里应该被定义成一个于类型无关的类,即要用到类型擦除,所以应该是NoType,这个NoType怎么来实现呢

用多态是一个方法,则改名Notype*,则Any构造函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值