最新从c++标准库指针萃取器谈一下traits技法_c++ rebind,2024年最新2024金三银四

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

那么为什么要把这个pointer_traits拿出来单独说明一下呢,因为类似之前的内存分配器一样,它是stl中某些容器的使用前提,在讲容器的时候,绕不开它,所以先把它搞清楚了有助于后续的学习和理解。

为什么要叫指针萃取器呢,我理解它类似于内存萃取器allocator_traits,都是根据模板参数去得到某种类型,并且traits也有萃取的意思,所以我这里就叫指针萃取器了。

2. 指针萃取器源代码分析

类模板pointer_traits在标准库中有两个版本,一个特化版本,一个非特化版本,源代码都在bits/ptr_traits.h头文件中,当然实际使用的时候它是被包含在头文件memory中的。

2.1 非特化pointer_traits

我们先分析一下非特化版本的源代码,如下:

//pointer\_traits类模板
template<typename \_Ptr>
    struct pointer\_traits
    {
 
    private:
	template<typename \_Tp>
	using __element_type = typename \_Tp::element_type;

      template<typename \_Tp>
	using __difference_type = typename \_Tp::difference_type;

      template<typename \_Tp, typename \_Up, typename = void>
	struct \_\_rebind : \_\_replace\_first\_arg<\_Tp, \_Up> {
  };

      //如果\_\_void\_t参数里面类型存在则直接使用下面这个结构体,否则使用上面那个
      template<typename \_Tp, typename \_Up>
	struct \_\_rebind<_Tp, _Up, __void_t<typename \_Tp::template rebind<_Up>>>
	{
  using type = typename \_Tp::template rebind<_Up>; };

    public:
      using pointer = _Ptr;
        
      using element_type
	= __detected_or_t<__get_first_arg_t<_Ptr>, _

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

T行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值