Какая связь между C ++ «концептом» и типизацией утки? - PullRequest
5 голосов
/ 06 ноября 2019

Был более ранний вопрос (8 лет назад!) О связи между шаблонами и типом утки: Какова связь между шаблоном C ++ и типом утки? Я позаимствовал и изменил строку тега дляМой вопрос о новой функции C ++.

В C ++ 20 появится новая функция «concept», которая будет больше похожа на функцию «Утиная печать». Правильно ли то, что новая «концепция» C ++ эквивалентна типизации утки для C ++? Если нет, то чем он отличается?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

В C ++ 20 появится новая функция «concept», которая будет больше похожа на функцию «Утиная печать»

Не совсем.

  1. Если мы примем, что шаблоны уже набирают утку во время компиляции

    • Я не согласен как с принятым ответом на связанный вопрос, так и со страницей Википедии, потому что выполняю то же самое во время компиляции, а не во время выполнения, не является убедительной причиной для того, чтобы дать ему совершенно другое имя. См., Например, статический и динамический полиморфизм.

    • тогда понятия, очевидно, не являются скорее типом уток, чем шаблоны, которые уже

    • другойАргументом здесь является то, что типизирование утки обычно предполагает, что вы выражаете свои ограничения типа , пытаясь использовать тип . Концепции дальше от этой модели, чем шаблоны уже.

  2. Если мы согласны (ошибочно) как с принятым ответом на связанный вопрос, так и с Википедией, то

    • причина, по которой шаблоны не являются (примером) утиной типизации, заключается в том, что они происходят во время компиляции

    • концепции также встречаются во время компиляции

    • КЭД

Концепции берут, какие шаблоны уже делают (которые могут или не могут быть,но, безусловно, это так: «Утиная печать» и дают более точные варианты специализации, и / или более четко выражают ограничения типов, и (надеюсь) помогают генерировать более совершенные ошибки.

Качество утки является неизменным для всех этихоперации.

2 голосов
/ 06 ноября 2019

Все зависит от того, как вы определяете «типизацию утки».

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

Аргумент, что шаблоны не являются уткой , по сути является аргументомИсходя из того, как этот термин обычно используется: языки, которые, как говорят, используют «типизацию утки» (Python, Lua и т. д.), проводят большую часть / всю свою проверку того, что утка на самом деле является уткой во время выполнения. Шаблоны выполняют свои эквивалентные операции во время компиляции, и поэтому они не представляют типизацию утки.

Обратите внимание, что понятия не влияют ни на одну из этих интерпретаций. Если вы считаете, что проверка во время выполнения является фундаментальной частью характера «типизации», то шаблоны не являются типизацией «утиной» даже с концепциями.

Так что, если вы считаете, что шаблоны представляют собой предварительные концепции «утиной типизации», тоВы, вероятно, чувствуете то же самое после пост-концепций. И наоборот.

...