Здравствуйте, Евгений Музыченко, Вы писали:
S>>Шаблон функции -- это как шаблон для заготовки. Вы берете шаблон и по шаблону изготавливаете деталь, далее используется уже конкретная деталь, а не шаблон.
ЕМ>Совершенно верно.
Вы зря стали комментировать отдельные фрагменты, упустив суть и принципиальные отличия.
S>>Шаблонная функция -- это функция, которая напрямую и используется, которая выполняет одни и те же "шаблонные" действия, но для разных аргументов.
ЕМ>То есть — конкретный результат раскрытия шаблона.
Нет. Посмотрите на приведенные мной примеры. В C++ вы можете иметь разные конкретные результаты применения шаблона функции. Т.е. разный код. Компилятор обрабатывает шаблон и делает функцию, далее результирующая функция делает конкретные действия.
Внутри шаблонной функции в языках с генериками код всегда будет одинаковый. Т.е. функция не меняется, она выполняет одни и те же действия по шаблону. Функция сразу делает конкретные действия. Отличаться могут лишь типы аргументов.
Впрочем, я не вижу предмета для дальнейшего спора. Тут как с "в лоб" и "по лбу": вроде бы одно и то же, но на практике есть существенная разница получить правый прямой точно "в лоб" или же его же по касательной "по лбу".
S>>Такой же, как в перегрузке вообще. Такой же, как и в наличии специализации для шаблонов.
ЕМ>И в перегрузке, и в специализации шаблона варианты отличаются друг от друга комбинацией типов
Бла-бла-бла. Это все херня и очень странно, что вы этого не видите не смотря на 40+ лет в программировании.
И перегрузка, и специализация шаблона -- суть инструменты для того, чтобы дать возможность программисту написать код наилучшим образом подходящий под определенный набор параметров.
Если эта задача наилучшим образом решается перегрузкой, то она решается перегрузкой. Если шаблонами -- то шаблонами (включая специализации для них).
ЕМ>Какую смысловую нагрузку это несет? Есть примеры осмысленного использования таких сочетаний, или эта возможность существует исключительно для выкручивания из искусственно усложненных ситуаций?
Достаточно вспомнить, что шаблоны в язык добавили сильно позже того, как язык стал мейнстримом. Так что одна из целей того, что у обычных функций есть приоритет над шаблонными, -- это обеспечение той же самой логики работы кода, который был написан до появления шаблонов, при переходе на более свежие версии языка.