在某些 STL 类中,您可以找到这样的代码(取自向量标头):
// TEMPLATE CLASS _Vector_val
template<class _Val_types>
class _Vector_val
: public _Container_base
{ // base class for vector to hold data
public:
typedef _Vector_val<_Val_types> _Myt;
typedef typename _Val_types::value_type value_type;
typedef typename _Val_types::size_type size_type;
typedef typename _Val_types::difference_type difference_type;
typedef typename _Val_types::pointer pointer;
typedef typename _Val_types::const_pointer const_pointer;
typedef typename _Val_types::reference reference;
typedef typename _Val_types::const_reference const_reference;
typedef _Vector_iterator<_Myt> iterator;
typedef _Vector_const_iterator<_Myt> const_iterator;
_Vector_val()
{ // initialize values
_Myfirst = pointer();
_Mylast = pointer();
_Myend = pointer();
}
pointer _Myfirst; // pointer to beginning of array
pointer _Mylast; // pointer to current end of sequence
pointer _Myend; // pointer to end of array
};
我不明白(也不知道如何有效地谷歌搜索)是这些代码行是如何工作的以及它们在做什么:
typedef typename _Val_types::value_type value_type;
例如,为什么value_type显然在_Val_types命名空间中?
另外,为什么这里似乎有一个函数调用? _Myfirst = pointer();
希望有人可以解释这是如何工作的,或者将我引导到一些解释它的相关网站。
多谢!
_Val_types
不是命名空间名称,它是实例化class _Vector_val
的任何类型。不允许将命名空间名称用作模板参数。
typedef typename _Val_types::value_type value_type;
在上行中,您将创建一个名为 value_type
的类型,该类型是嵌套类型的别名,也称为在_Val_types
类型中定义的value_type
。typename
关键字的原因是,当您引用依赖类型(value_type
取决于_Val_types
的类型)时,它是必需的,有关更多详细信息,请参阅此综合答案。
_Myfirst = pointer();
上面的行是默认构造pointer
并将该值分配给_Myfirst
。如果pointer
是一个平凡的类型,假设_Val_types
是int
的,_Val_type::pointer
被定义为int *
,那么上面的表达式将值初始化一个int *
,这意味着它初始化它为零,零可以转换为nullptr
。长话短说,它将_Myfirst
数据成员设置为nullptr
。