У меня есть некоторые вопросы о концепции статического полиморфизма, о котором я когда-либо слышал; вы можете интерпретировать их прежде всего в контексте С++, но я был бы признателен за языковые агностические ответы, где это применимо (следовательно, помечая как С++, так и язык-агностик).
-
Как определить статический полиморфизм вообще? В качестве примера я считаю, что функция
std::sort
из С++ считается статически полиморфной, поскольку она зависит от некоторого интерфейса, предоставляемого некоторыми объекты, которые ведут себя как итераторы, а точное поведение в интерфейсе предоставленных итераторов может быть определено во время компиляции. Является ли это объяснением, как мы определяем статический полиморфизм, или это просто описание конкретного случая и там больше? -
Каковы общие шаблоны кода использования статического полиморфизма в С++? Также: SP достигается только через шаблоны в С++?
-
Верно ли, что данная диаграмма класса UML напрямую не описывает, как обрабатывается полиморфизм, и, таким образом, он может быть хотя бы частично реализован либо статически, либо динамически? Другими словами: выбор статического или динамического полиморфизма не зависит от модели ООП и, следовательно, до того, как разработчик примет решение?
-
Является ли статический полиморфизм только С++-специфичным и связан с тем, как работают шаблоны? Если нет, то присутствует ли он в каких-либо других основных языках помимо С++? Можем ли мы иметь эквивалент статического полиморфизма в Java, С#.. что угодно, и принесет ли он какие-либо выгоды?
-
Самое важное... Каковы фактические преимущества использования статического полиморфизма? Я думаю, мы можем согласиться с тем, что он снижает гибкость кода; каковы преимущества, кроме того - в случае С++ - сохранение одного разыменования указателя (стоимость виртуальной функции/указателя на функцию/делегата)? Что такое класс проблем, где статический полиморфизм особенно полезен, правильный выбор для реализации?