gpt4 book ai didi

c++ - (template) rebind<> 做什么?

转载 作者:IT老高 更新时间:2023-10-28 22:19:30 30 4
gpt4 key购买 nike

为了进一步了解标准库的实际实现方式,我正在检查 Visual Studio 中的所有容器。这里我看到了一些奇怪的结构:

std::list<> 的某些基类中找到以下typedef

typedef typename _Alloc::template rebind<_Ty>::other _Alty;

其中“_Alloc”对应于分配器模板参数(和_Ty 包含的类型)。我很难找到这个“关键字”的一个很好的解释。到目前为止我发现的最好的事情是它是分配器接口(interface)的一部分。虽然甚至 cppreference不太好解释这个。

这是什么template rebind<>做?为什么在那个位置有必要?

最佳答案

_Alloc模板用于获取某种类型的对象。容器可能有内部需要分配不同类型的对象。例如,当您有 std::list<T, A> , 分配器 A用于分配 T 类型的对象但是 std::list<T, A>实际上需要分配一些节点类型的对象。调用节点类型_Ty , std::list<T, A>需要获得 _Ty 的分配器使用 A 提供的分配机制的对象.使用

typename _A::template rebind<_Ty>::other

指定相应的类型。现在,这个声明中有一些语法上的烦恼:

  1. rebind 起是_A的成员(member)模板和 _A是一个模板参数,rebind成为从属名称。为了表明依赖名称是一个模板,它需要以 template 为前缀.没有 template关键字<将被视为小于运算符。
  2. 姓名other也依赖于模板参数,即它也是一个依赖名称。为了表明从属名称是一种类型,typename需要关键字。

关于c++ - (template) rebind<> 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14148756/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com