在C ++头文件中,我看到了这段代码:
typedef typename _Mybase::value_type value_type;
现在,据我所知,引用Schildt撰写的« C ++完整参考»。 typename
可以用关键字类代替,typename
的第二个用途是通知编译器模板声明中使用的名称是类型名称而不是对象名称。
同样,您可以使用关键字typedef
定义新的数据类型名称。你不是
实际上是创建一种新的数据类型,而是为现有数据定义一个新名称
类型。
但是,您能否准确解释上述代码行的含义,其中typedef
和typename
组合在一起。声明中的“::
”意味着什么?
答案 0 :(得分:48)
typedef定义了一个在代码中使用的新类型,如速记。
typedef typename _MyBase::value_type value_type;
value_type v;
//use v
typename这里让编译器知道value_type
是一个类型而不是_MyBase
内的对象。
::
是该类型的范围。它有点像“is in”,所以value_type
“在”_MyBase
中。或者也可以被认为是包含。
答案 1 :(得分:3)
typename
表示_Mybase::value_type
是类型的名称,因此typedef
可以解决这个问题。