我正在阅读STL源代码.虽然我理解我在stl_list.h中阅读的内容,但我想完全理解以下代码片段(我认为主要与模板语法有关).
模板
class _List_base {
...
typedef typename _Alloc::template rebind<_List_node<_Tp> >::other _Node_Alloc_type; //(1).
...
typedef _Alloc allocator_type;
get_allocator() const
{ return allocator_type(*static_cast<
const _Node_Alloc_type*>(&this->_M_impl)); } // (2)
...
};
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么我们需要在第(1)行中的_Alloc之后使用"模板"吗?(并给出这一行的完整解释?)
有人可以解释为什么我们可以在行(2)中将_Node_Alloc_type转换为_Alloc吗?
ava*_*kar 12
template需要使用关键字将名称标识rebind为类模板.没有它,rebind可以被认为是变量或常量(在这种情况下是由于typename关键字的类型),并且以下<可以被解释为小于运算符.
这有点类似于typename关键字(当然必须将其标识other为类型).
每个分配器都需要提供一个调用的元函数(即类模板)rebind,它返回相同的分配器,但是返回不同的类型.换一种说法,
Alloc<T>::rebind<U>::other
Run Code Online (Sandbox Code Playgroud)
名称与...相同
Alloc<U>
Run Code Online (Sandbox Code Playgroud)
没有更多背景,你的问题的第二部分很难回答.是什么类型的_M_impl?该类型是如何定义的?