71

在 C++ 头文件中,我看到了以下代码:

typedef typename _Mybase::value_type value_type;

现在,据我所知,引用Schildt的《C++ 完整参考》。typename可以用关键字class代替,第二个用途typename是通知编译器模板声明中使用的名称是类型名称而不是对象名称。

同样,您可以使用关键字定义新的数据类型名称typedef。您实际上并没有创建新的数据类型,而是为现有类型定义了一个新名称。

不过,能不能具体解释一下上面这行代码是什么意思,在哪里typedeftypename结合在一起的。语句中的“”是什么意思::

4

2 回答 2

78

typedef 正在定义一个新类型以在您的代码中使用,例如速记。

typedef typename _MyBase::value_type value_type;
value_type v;
//use v

这里的 typename 是让编译器知道它value_type是一个类型而不是_MyBase.

::是类型的范围。这有点像 "is in" 所以value_type"is in" _MyBase。或者也可以认为是包含。

于 2013-08-22T16:01:58.490 回答
5

typename据说那是_Mybase::value_type类型的名称,所以typedef可以依靠这一事实。

于 2013-08-22T16:01:44.677 回答