範本和名稱解析
在樣板定義中,有三種類型的名稱。
在本機宣告的名稱,包括範本本身的名稱,以及任何名稱在樣板定義中宣告。
從封入的範圍以外的範本定義的名稱。
以某種方式而定的樣板引數的名稱稱為相依的名稱。
前兩個名稱也會適用於類別和函式的範圍,而進行名稱解析的特殊規則才能樣板定義中處理加相依的名稱的麻煩。 這是因為編譯器知道一點有關這些名稱直到範本具現化,因為它們可能是完全不同的型別引數可以用哪一個範本而定。 Nondependent 名稱可查詢一般的規則,並處定義的範本。 這些名稱,正在不受影響的樣板引數,會查詢所有的樣板特製化的一次。 直到產生樣板後都不會被相依的名稱,並可查詢分別為每個特製化。
型別是是否依樣板引數的相依項目。 具體來說,型別是相依才:
樣板引數本身:
T
具有限定性條件,包括某個相依型別的限定的名稱:
T::myType
如果未限定的組件識別某個相依型別的限定的名稱:
N::T
Const 或靜態型別為其基底型別是相依的型別:
const T
指標、 參考、 陣列或相依型別為基礎的函式指標型別:
T *, T &, T [10], T (*)()
陣列,其大小根據的樣板參數:
template <int arg> class X { int x[arg] ; // dependent type }
範本類型,由樣板參數所組成:
T<int>, MyTemplate<T>
型別相依性和值的依存性
名稱和運算式取決於樣板參數歸類為型別相依或相依,根據的範本參數的型別參數或實值參數的值。 此外,取決於樣板引數的型別與範本中宣告的識別項會被視為值相依,因為是整數或列舉型別初始化類型與數值相關的運算式。
型別相依性和相關值的運算式都是包含型別相依或值相依的變數的運算式。 這些運算式可以有不同,取決於所使用之範本的參數的語意。