Verweisen auf Vorlagen [C++-Sprache]
In diesem Thema wird erläutert, wie eine zuvor deklarierte Vorlage verwendet wird.
template-name < template-arg-list >
Hinweise
template-arg-list sollte eine durch Trennzeichen getrennte Liste sein:
expressiontype-name
Alle expression-Argumente müssen konstante Ausdrücke sein. Der Compiler erstellt eine neue Instanz (als Instanziierung) der vorlagenbasierten Klasse oder Funktion, wenn es keine genaue Übereinstimmung mit einer zuvor generierten Vorlage gibt. So wird beispielsweise auf die MyStack-Klasse verwiesen, die in Memberfunktionsvorlagen definiert wurde:
MyStack< unsigned long, 5 > stack1;
// Creates a stack of unsigned longs.
MyStack< DWORD, 5 >stack2;
// Uses code created above.
MyStack< char, 6 > stack3;
// Generates new code.
MyStack< MyClass, 6 > stack4;
// Generates stack of MyClass objects.
Jede generierte Funktionsvorlage erstellt seine eigenen statischen Variablen und Member.
Alle Vorlagenargumente müssen an dem Punkt verfügbar sein, an dem sie verwendet werden.
Die Ausnahme zu der oben genannten Syntaxregel ist, wenn eine Membervorlagenspezialisierung in einem Ausdruck nach den Operatoren ::, . oder -> identifiziert wird. Nach diesen Operatoren kann das Schlüsselwort template angegeben werden. Visual C++ weicht insofern vom Standard ab, als dass das template-Schlüsselwort in diesem Kontext immer optional ist, während der Standard es unter bestimmten Umständen erfordert. Das Vorlagenschlüsselwort kann nicht in der Spezialisierung verwendet werden, es sei denn, es folgt diesen Operatoren.
[ :: | -> | . ] template template-name < template-arg-list >
Beispielsweise wird ein Aufruf der int-Spezialisierung der Memberfunktionsvorlage f<T>(int), die ein Member der Klasse X ist, durch Folgendes festgelegt und an den Parameter 10 übergeben.
X::template f<int>(10);