Re[9]: Для чего шаблонной функции нужна особая сигнатура?
От: so5team https://stiffstream.com
Дата: 24.01.23 09:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

S>>Шаблон функции -- это как шаблон для заготовки. Вы берете шаблон и по шаблону изготавливаете деталь, далее используется уже конкретная деталь, а не шаблон.


ЕМ>Совершенно верно.


Вы зря стали комментировать отдельные фрагменты, упустив суть и принципиальные отличия.

S>>Шаблонная функция -- это функция, которая напрямую и используется, которая выполняет одни и те же "шаблонные" действия, но для разных аргументов.


ЕМ>То есть — конкретный результат раскрытия шаблона.


Нет. Посмотрите на приведенные мной примеры. В C++ вы можете иметь разные конкретные результаты применения шаблона функции. Т.е. разный код. Компилятор обрабатывает шаблон и делает функцию, далее результирующая функция делает конкретные действия.

Внутри шаблонной функции в языках с генериками код всегда будет одинаковый. Т.е. функция не меняется, она выполняет одни и те же действия по шаблону. Функция сразу делает конкретные действия. Отличаться могут лишь типы аргументов.

Впрочем, я не вижу предмета для дальнейшего спора. Тут как с "в лоб" и "по лбу": вроде бы одно и то же, но на практике есть существенная разница получить правый прямой точно "в лоб" или же его же по касательной "по лбу".

S>>Такой же, как в перегрузке вообще. Такой же, как и в наличии специализации для шаблонов.


ЕМ>И в перегрузке, и в специализации шаблона варианты отличаются друг от друга комбинацией типов


Бла-бла-бла. Это все херня и очень странно, что вы этого не видите не смотря на 40+ лет в программировании.

И перегрузка, и специализация шаблона -- суть инструменты для того, чтобы дать возможность программисту написать код наилучшим образом подходящий под определенный набор параметров.

Если эта задача наилучшим образом решается перегрузкой, то она решается перегрузкой. Если шаблонами -- то шаблонами (включая специализации для них).

ЕМ>Какую смысловую нагрузку это несет? Есть примеры осмысленного использования таких сочетаний, или эта возможность существует исключительно для выкручивания из искусственно усложненных ситуаций?


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