Vorlagen und Namensauflösung
In der Vorlagendefinitionen gibt es drei Typen von Namen.
Lokaler deklarierten Namen ein, der den Namen der Vorlage selbst sowie alle Namen deklariert innerhalb der Vorlagendefinition.
Namen des einschließenden Bereich außerhalb der Vorlagendefinition.
Namen, die auf eine Weise mit Vorlagenargumenten abhängig sind, so genannte abhängige Namen.
Während die ersten beiden Namen auch Klasse und Gültigkeitsbereiche der Funktion beziehen, sind Sonderregelungen für Namensauflösung in der Vorlagendefinitionen erforderlich, um die hinzugefügte Komplexität der abhängigen Namen zu verarbeiten.Dies liegt daran, dass der Compiler nur wenig zu diesen Namen weiß, bis die Vorlage instanziiert wurde, da sie völlig unterschiedliche Typen aufweisen können, je nachdem die Vorlagenargumente verwendet werden.Nondependent-Namen den üblichen Regeln werden nach oben und zum Zeitpunkt der Definition der Vorlage gesucht.Diese Namen, wobei geschaute sind, unabhängig von der Vorlagenargumente oben allemal Vorlagen für ein spezialisierungen.Abhängige Namen werden nicht in gesucht, bis die Vorlage instanziiert werden und ist nach jeder separat oben Spezialisierung gefunden.
Ein Typ ist abhängig, wenn er mit Vorlagenargumenten abhängt.Dabei handelt es sich um einen Typ abhängig, wenn er ist:
Das Vorlagenargument auch:
T
Ein qualifizierter Name einer Qualifikation einschließlich eines abhängigen Typ:
T::myType
Ein vollständiger Name, wenn der nicht gekennzeichnete Komponente einen abhängigen Typ bezeichnet:
N::T
Ein const oder ein flüchtiger Typ, für den der Basistyp ein abhängiger Typ ist:
const T
Ein Zeiger, ein Verweis, ein Array oder einen Funktionszeiger des Arrays anhand eines abhängigen Typ:
T *, T &, T [10], T (*)()
Ein Array, dessen Größe basierend auf einen Vorlagenparameter ist:
template <int arg> class X { int x[arg] ; // dependent type }
Erstellen eines Vorlagentyp aus einem Vorlagenparameter:
T<int>, MyTemplate<T>
Typ-Abhängigkeit und Werts-Abhängigkeit
Die Namen und Ausdrücke, die einen Vorlagenparameter abhängig sind, werden als Typ oder abhängiges Element abhängiges Wert je nach Typ kategorisiert, ob der Vorlagenparameter oder ein Typparameter ein Wertparameter ist.Außerdem müssen alle Bezeichner, die in einer Vorlage mit einem abhängigen Typ vom Vorlagenargument deklariert werden, gelten als Werts abhängiges Element, z. B. eine ganze Zahl oder einen Enumerationstyp, die mit einem Ausdruck des WERT abhängigen Datei erneut initialisiert werden.
Ausdrücke für TYPE-abhängigen WERT Elements und des abhängigen Elements sind Ausdrücke, die Variablen einschließen, die Art abhängiges Element oder Werts abhängiges Element befinden.Diese Begriffe können die Semantik variieren in Abhängigkeit von den Parametern verfügen, die für die Vorlage verwendet werden.