Параметр шаблона равен T
. Аргумент шаблона - это фактический тип, значение T
.
Учтите это,
template<typename T, typename U>
void f(T a, U b);
f<int,char>(10, 'A`);
Здесь T
и U
- параметры шаблона, а int
и char
- аргументы шаблона. Поскольку это шаблон функции, вы также можете сказать параметры шаблона функции и аргументы шаблона функции соответственно.
И a
и b
являются параметрами функции, а 10
и 'A'
являются аргументами функции.
Также обратите внимание, что в некоторых ситуациях аргументы шаблона функции могут быть выведены компилятором:
f(10, 'A'); //template arguments can be deduced from 10 and 'A'
Здесь T
выводится как int
из аргумента функции 10
, а U
выводится как char
из 'A'
.
Интересное отличие состоит в том, что иногда компилятор может выводить аргументы шаблона функции , но он никогда не может вывести аргументы функции!