相關類型通常需要typename
來告訴編譯器成員是一個類型,而不是函數或變量。爲什麼'typedef'這個單詞在依賴類型後需要'typename'?
但是,這是而不是總是這樣。
例如,基類並不需要這個,因爲它永遠只能是一個類型:
template<class T> struct identity { typedef T type; }
template<class T> class Vector : identity<vector<T> >::type { }; // no typename
現在的問題是,爲什麼typedef
曾經要求後typename
?
template<class T> class Vector
{
typedef typename /* <-- why do we need this? */ vector<T>::iterator iterator;
};
爲什麼不問一個關於例如'static'? –
@ n.m .:哦,對不起,我現在明白了。是的,我沒有想到這一點,但我認爲這可能是因爲默認情況下int ...默認情況下...所以'靜態x;'將默認是'int'不是嗎? (或者至少它會在C?)但是老實說不知道,這是一個很好的問題。 – Mehrdad
大約15年前,C已經下降了隱式int :) – hvd