我是從這個page閱讀這篇文章,所以讓我來介紹代碼:需要幫助理解本文有關模板
template <class T> class D: typename C<T>::Base { //#1 error
D(): typename C<T>::Base(typename C<T>::Base(0)) { } //#2 error, #3 correct
typename C<T> f() { //#4 error
typename C<T>::A* p; //#5 correct
A<T>::B * n;
}
};
class Q{
typename C<long>::A * p; // #6 error
}
template <class T, class U> class R{
typename C<long>::A * p; // #7 optional
}
#3
是正確的,但我想了解作者試圖傳達。他說:
typename#3:correct。這裏,typename用於消除參數的 類型。如果沒有typename,則表達式C :: Base(0) 將被視爲對稱爲Base的函數的調用。隨着 類型名稱的前綴,C ::基地(0)創建 Ç:: Base的類型的臨時對象與參數初始化0
另外,如果你看到上面那部分作者說一點:
typename關鍵字必須前綴一個從屬名稱時名稱 滿足以下三個規則:
1.It出現一個模板中
2. 這是合格//我無法在所有了解這條線結合在基類規範或成員初始化列表 不使用開始的這句話
3.It的對位。
我無法理解此行(上述#2)在所有的結合開始這句話的段落。你能解釋作者的含義嗎?
你有問題嗎? –
我把它清理了很多,我移動了我認爲**是塊引用的問題。 –
@Kerrek:是的(閱讀粗體句子?),你說這是因爲你沒有看完整個我認爲*笑臉* –