[C++再学习系列] typename和依赖类型
2011-01-21 13:54 zhenjing 阅读(1359) 评论(1) 编辑 收藏 举报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 的代码,但这样的代码不可移植。)
---------------------------------------------------
兄弟的公司:立即购--手机购物,诚信网购
兄弟的公司:立即团
欢迎转载,请注明作者和出处
作者:zhenjing.chen
出处:http://www.cnblogs.com/zhenjing/
未注明转载的文章,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。