2012-03-23 6 views
0

Я веду исследование исследований систем типа. Для этой работы я изучаю использование вариантов, структурного подтипирования, универсального полиморфизма и экзистенциального полиморфизма в популярных языках. Функциональные языки, такие как heskell, ocaml, предоставляют таких функционеров. Но я хочу, чтобы такой популярный язык, как C++, обеспечивал выше функциональность. Это означает, что, как C++ реализованварианты, экзистенциальный полиморфизм в C++

  1. варианта

  2. структурного подтипирования

  3. универсального полиморфизм

  4. экзистенциального полиморфизма.

+0

Для вариантов вы можете взглянуть на boost.variant, остальное я понятия не имею, что это может быть (что, вероятно, означает, что вы можете сделать это с помощью вариативных шаблонов). –

+0

Привет, варианты могут быть реализованы структурой и союзами? –

ответ

2
  1. объединение можно рассматривать как рудиментарный вид варианты, но в действительности, они являются более примитивным механизмом для перекладки памяти (и небезопасной).

  2. В C++ нет структурной типизации, не говоря уже о подтипинге. Все типы являются номинальными.

  3. Шаблоны имеют некоторое поверхностное сходство с универсальным полиморфизмом, но на самом деле совершенно разные. По сути, они являются прославленными макросами с почти не проверкой типа (например, с макросами, как проверка, так и генерация кода происходит после расширения).

  4. В C++ нет формы экзистенциальных типов (в Java есть ограниченная форма, а именно подстановочные знаки).

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

+0

Вы можете эмулировать экзистенциальные типы через неполные типы классов (лучший пример - идиома pimpl), но это толкает его. – GManNickG

+0

'boost :: variant' - очень хорошая реализация вариантов. Предложение Concepts реализует структурный подтипирование, нет? Кроме того, я мало знаю о филогении семантики типа ... но не определяет ли спецификация частичного заказа шаблона как строгий тип проверки универсального полиморфизма? Это важный инструмент для диспетчеризации структур типа в метапрограммах. – Potatoswatter

+0

привет, я изучаю основные функции языка программирования, вот почему я думаю, что boost :: variant не может быть хорошим моментом. Кстати, полиморфизм времени выполнения является типичным типированием? @Andreas Rossberg –

 Смежные вопросы

  • Нет связанных вопросов^_^