C + +-结合 typedef 和 typeename 的语句的含义

在一个 C + + 头文件中,我看到这段代码:

typedef typename _Mybase::value_type value_type;

现在,据我所知,引用“ C + + 完整参考文献”由席尔特。typename可以被关键字类取代,typename的第二个用途是通知编译器模板声明中使用的名称是类型名称而不是对象名称。

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

但是,您能否准确地解释上面这行代码的含义,其中 typedeftypename是组合在一起的。声明中的“ ::”意味着什么?

52596 次浏览

typename是说 _Mybase::value_type是类型的名称,所以 typedef可以依赖于这个事实。

Typedef 定义了一个新的类型以便在代码中使用,比如速记。

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

这里的 typename 让编译器知道 value_type是一个类型,而不是 _MyBase的静态成员。

::是该类型的作用域。它有点像“ is in”,所以 value_type“ is in”_MyBase。或者也可以被认为包含。