Ссылки на шаблоны [язык C++]
В этом разделе показывается использование ранее объявленного шаблона.
template-name < template-arg-list >
Заметки
Список-аргументов-шаблона должен представлять собой список, разделенный запятыми:
expressiontype-name
Все аргументы выражений должны быть константными выражениями. При отсутствии точного соответствия ранее созданному шаблону компилятор создает новый экземпляр шаблонного класса или функции. Например, ниже показана ссылка на класс MyStack, определенный в разделе Шаблоны функций-членов.
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.
Каждый созданный шаблон функции создает свои собственные статические переменные и члены.
Все аргументы шаблона должны быть доступны в точке, где они используются.
Исключение для описанного выше правила синтаксиса состоит в определении специализации шаблона члена в выражении после операторов ::, . или ->. После этих операторов можно указать ключевое слово template. Visual C++ не соответствует стандарту в том, что ключевое слово template в данном контексте всегда является необязательным, тогда как в стандарте оно в некоторых случаях обязательно. Ключевое слово template можно использовать в специализации только после этих операторов.
[ :: | -> | . ] шаблон шаблон-имя < шаблон-arg-list >
Например, ниже показан вызов специализации int шаблона функции-члена f<T>(int), который является членом класса X и передает ему параметр 10.
X::template f<int>(10);