现在的位置: 首页 > 综合 > 正文

[C++再学习系列] typename和依赖类型

2014年11月18日 ⁄ 综合 ⁄ 共 561字 ⁄ 字号 评论关闭

template<typename (class) T>

class Widget { ... };

class

typename

均可用于声明模板的形式类型参数,但

typename

能更清楚地表示:

T

可以是任何

类型;不必是一个类。

为了避免潜在的模糊解析,编译器要求在依赖形式类型参数的类型名字之前使用

typename

。这样的类型被称为依赖类型

示例:


template<typename C>

bool lastGreaterThanFirst(const C& container)

{

      

if (container.empty())
return false;

      

typename C::const_iterator
begin(container, begin());

      

typename
C::const_ierator end(container.end());

      

return *--end >
*begin;

}

 

在这个例子里,局部变量

begin

end

的类型是

C::const_iterator

const_iterator

是依赖形式类型参数

C

的一种类型。因为

C::const_iterator

是一种依赖类型,你被要求在它之前放上

typename

这个词。(一些编译器错误地接受没有

typename

的代码,但这样的代码不可移植。)

 

抱歉!评论已关闭.