TL; DR: Да, концепции являются (или, по крайней мере, позволяют вам определять) экзистенциальными типами.
Вот мои рассуждения, но будьте осторожны; Я не теоретик типов:
Рассмотрим определение абстрактного типа данных в Википедии (выделено мной):
В информатике абстрактный тип данных (ADT) - это математическая модель для определенного класса типов данных одного или нескольких языков программирования, имеющих аналогичную семантику. Абстрактный тип данных определяется косвенно, только операциями, которые могут быть выполнены с ним, и математическими ограничениями на эффекты (и, возможно, стоимость) этих операций.
Экзистенциальные типы, как описано в этих два вопроса о переполнении стека и статья в Википедии, которую вы связали, похоже, являются способом моделирования абстрактных типов данных с использованием параметризованных определений. Важно отметить, что эти параметры не являются частью результирующего экзистенциального типа.
С другой стороны, концепция представляет собой предикат для одного (нуля?) Или нескольких типов, которые можно использовать для ограничения шаблонов. Не очевидно, что они имеют какое-либо отношение к экзистенциальным типам - пока вы не рассмотрите requires
предложения.
По сути, requires
позволяет вам проверять определенные свойства типов. Среди них - то, определяют ли они определенный тип-член, имеют ли они определенную функцию-член, могут ли они преобразовываться в определенные типы и т. Д. Это наблюдение (на самом деле основной момент проектирования) - вот в чем суть дела.
По крайней мере, мне кажется, что в основе концепции лежат механизмы определения абстрактных типов данных. Здесь мы начинаем видеть сходство с экзистенциальными типами: они моделируют ADT с помощью параметризации и, что более важно, позволяют вам определять ADT без раскрытия параметров.
Возьмем, к примеру, концепцию Container
. С помощью Concepts Lite вы можете написать что-нибудь вроде
void print (Container c) {
for (const auto& e : c)
print (e);
}
// Later
print (std::vector <int> {1, 2, 3, 4});
Это работает, потому что существует некоторый тип I
, такой, что выражения begin (c)
и end (c)
возвращают объекты типа I
вместе с другими ограничениями Container
. Это экзистенциальная количественная оценка; Container
- экзистенциальный тип.
person
Stuart Olsen
schedule
09.04.2014