c ++模板嵌套typename

时间:2017-07-06 09:20:01

标签: c++ templates nested

要求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关键字是必要的?

0 个答案:

没有答案