要求C ++程序员在访问之前放置typename关键字的动机之一 嵌套在模板化类型中的类型是为了防止模板中的歧义。例如,考虑一下 以下代码假定存在名为MyTemplate的模板类型:
template <typename T> void MyFunction(const T& elem)
{
int itr;
while(true)
{
typename MyTemplate<T>::Inner * itr;
}
}
考虑一下
行 typename MyTemplate<T>::Inner * itr.
因为我们有typename 关键字在这里,编译器理解我们正在声明一个MyTemplate :: Inner *类型的指针 叫做itr。如果我们不放
typename
关键字,C ++会认为
MyTemplate<T>::Inner
是类常量而不是类型。什么声明
MyTemplate<T>::Inner * itr
这个意思是什么意思?这两种情况之间的区别是否有助于解释为什么typename关键字是必要的?