Re[6]: Для чего шаблонной функции нужна особая сигнатура?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 23.01.23 19:22
Оценка:
Здравствуйте, so5team, Вы писали:

S>К тому, что происходит в C++ лучше всего подходит определение "шаблон функции", т.к. по сути мы имеем текстовый шаблон, на основании которого компилятор генерирует текст результирующей функции с подставленными параметрами


Ну так здесь "шаблон функции" и становится "шаблонной функцией" — функцией, сгенерированной по шаблону. "Шаблонный текст" — это конкретный текст, написанный по шаблону текста, "шаблонное поведение" — тоже конкретное поведение, реализующее шаблон поведения, и т.п.

S>Шаблонная функция лучше подходит к языкам вроде Java и C#, в которых обобщенное программирование реализовано через генерики. Там код шаблонной функции можно скомпилировать однажды (даже без актуальных параметров), а затем использовать этот скомпилированный код при вызове функции с разными типами параметров.


Если там при вызове функции вставляется автоматическое переключение на нужный вариант кода, то каждый из вариантов представляет собой "шаблонную функцию" в смысле C++ (результат порождения). Если же там сохраняется лишь предкомпилированный шаблон, а в момент вызова он докомпилируется на лету, то получается то же "шаблон функции", из которого "шаблонная функция" порождается на этапе выполнения.

S>Вас же не удивляет то, что

S>
S>void f(int, int);
S>void f(long, long);
S>

S>получают в итоге разные сигнатуры.

Это как раз не удивляет. А вот о том, что можно смешивать шаблонные и нешаблонные функции с одинаковыми наборами типов, я давно и прочно забыл, поскольку никогда этим не пользовался. Только вот какой в этом может быть смысл? Разве только перекрыть ранее определенную нешаблонную функцию, но это ж получатся изрядные грабли.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.