Терминология шаблонов - PullRequest
       1

Терминология шаблонов

1 голос
/ 10 сентября 2011
template <typename T> void quark(T&& t) {
}

Предыдущий код имеет такое объяснение:

Когда мы вызываем quark(up), выполняется вывод аргумента шаблона. quark() - это шаблон функции с параметром шаблона T, но мы не предоставили явный аргумент шаблона (который будет выглядеть как quark<X>(up)). Вместо этого аргумент шаблона может быть выведен путем сравнения типа параметра функции T&& с типом аргумента функции (lvalue типа string).

Может кто-нибудь сказать мне, кто есть кто в аргументе шаблона, параметре шаблона, параметре функции, аргументе функции?

Может быть разница между параметром и аргументом, какой параметр этот тип записал в объявлении функции, а аргумент является сущностью, которая фактически передается в функцию? Но разницу между функцией и аргументами / шаблонами я даже не представляю.

Ответы [ 2 ]

4 голосов
/ 10 сентября 2011

Параметр шаблона равен T, аргумент шаблона - это то, что должно быть выведено как T при вызове quark (вверх).

Параметр функции равен t, аргумент функции имеет значение.

3 голосов
/ 10 сентября 2011

Параметр шаблона равен 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'.

Интересное отличие состоит в том, что иногда компилятор может выводить аргументы шаблона функции , но он никогда не может вывести аргументы функции!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...