谁能解释为什么 _List_const_iterator 会使用 _List_node_base 并在需要时将其向下转换为 _List_node? -- 我认为这背后一定有一些原因。
谢谢
struct _List_node_base
{
_List_node_base* _M_next; ///< Self-explanatory
_List_node_base* _M_prev; ///< Self-explanatory
// ...
};
template<typename _Tp>
struct _List_node : public _List_node_base
{
_Tp _M_data; ///< User's data.
};
template<typename _Tp>
struct _List_const_iterator {
// Must downcast from List_node_base to _List_node to get to
// _M_data.
reference operator*() const
{ return static_cast<_Node*>(_M_node)->_M_data; }
// ...
// The only member points to the %list element.
const _List_node_base* _M_node; ///WHY NOT USING _List_node here?
};
最佳答案
我猜 _M_node
类型为 _List_node_base*
以便可以使用 _M_next
分配/初始化它和/或 _M_prev
(如您所示,类型为 _List_node_base*
)。
我想知道为什么会有一个 _List_node_base
类,而不是声明 _M_next
和 _M_prev
作为 _List_node
的成员类(class)。一个原因可能是为了减少生成的代码量:如果您有许多不同的 _List_node
特化类,将大部分(如果不是全部)代码/实现放在非泛型基类中可以减少生成的代码量。
关于c++ - STL list_iterator代码题(STL 4.0.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545959/