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