簡體   English   中英

C ++ typename和內部類

[英]C++ typename and inner classes

我試過谷歌搜索,但我無法得出一個合適的答案。 任何C ++專家都可以告訴我為什么C ++要求你用typename關鍵字聲明OuterClass <T> :: Innerclass?

我是數據結構課程的助教,我一直看到這個錯誤。 我知道要告訴我的學生他們需要將typename放在返回類型的前面,但我無法解釋為什么這是必需的。

謝謝。

那是因為模板中的兩階段名稱查找。 當編譯器看到Innerclass時,它必須知道該名稱是否是一個類型(例如,對於OuterClass的某些特化,可以是int類型的靜態成員)。 所以它假設它不是類型名稱,除非你這么說。 typename必須在模板中使用,並且只能在依賴於模板參數的名稱上使用。 HTH

例:

template <class T>
class X
{ 
   typedef T XXX;
};
template<>
class X<char>
{
   static int XXX;
};

template<class T>
class Y
{        
   // X<T>::XXX member; invalid XXX is not assumed to be a type! 
   typename X<T>::XXX member; 
   //we explicitly specify that XXX is a type; Later, upon instantiation, we will verify that
};

OuterClass<T>::Innerclass

因為Innerclass表示一個type (我可以從你的問題中看到)所以你需要在OuterClass<T>::Innerclass之前添加關鍵字typename

示例:

template <class T>
void foo() {
   T::iterator * iter;
   ...
}

沒有typename T::iterator * iter; 將被解釋為T::iteratoriter之間的乘法運算

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM