- 当使用作用域运算符(
::)来访问static成员和类型成员。在非模板代码中,编译器掌握类定义,因此它知道通过作用域运算符访问的名字是类型还是static成员。但对于模板代码,当T是一个模板类型参数,当编译器遇到类似T::mem这样的代码时,它不知道mem是一个类型成员还是一个static数据成员,直至实例化时才知道。所以使用关键字typename来实现。
template <typename T>
typename T::value_type top(const T& c) {
if (!c.empty()) return c.back();
else return typename T::value_type();
}
471

被折叠的 条评论
为什么被折叠?



