【发布时间】:2017-09-08 08:58:54
【问题描述】:
在 Scott Meyers 的书中,模板中依赖于模板参数的名称称为依赖名称。 (当依赖名嵌套在类中时,我称之为嵌套依赖名)
所以必须在依赖名称前使用“typename”关键字,对吧?
template<typename C>
void print2nd(const C& container) {
typename C::const_iterator iter(container.begin());
...
}
但是为什么在这段取自 Josuttis 书中的代码中,std::vector 是另一个模板的实例化,显然依赖于 T,他们在这里不使用“typename”:
template <typename T>
class Stack {
(?typename?) std::vector<T> elems;
...
};
这一切看起来都令人困惑,尤其是 Meyers 的另一个例子:
template<typename IterT>
void workWithIterator(IterT iter) {
typename std::iterator_traits<IterT>::value_type temp(*iter);
... }
在我看来,它们都一样。怎么区分?
【问题讨论】: