LINUX.ORG.RU

Ответ на: комментарий от yoghurt

Что-то у меня в голову не укладывается пока, что такое ADT... Вроде, и описания есть в интернетах — а не понимаю.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

см. «9 Алгебраический (индуктивный) тип данных (Algebraic (inductive) datatype)» вот тут. Есть примеры имитации на Си.

yoghurt ★★★★★
()

Алгебраические типы данных образуются из существующих в языке объединением и декартовым произведением. Первое в С++ имитируется boost::variant или наследованием (union в некоторых случаях), второе - любым кортежем или структурой.

Begemoth ★★★★★
()

АлгТД это просто класс с замкнутым списком наследников и открытым списком виртуальных функций.

На говнояве (которую пытается юзать http://fprog.ru/2009/issue3/eugene-kirpichov-elements-of-functional-languages/ ) такого не сделать, на плюсах, похоже, можно.

Достаточно ограничить наследование [23.11] How can I set up my class so it won't be inherited from? и реализовать открытый список виртуальных функций через визитор.

Собственно я все порываюсь написать такой шаблончик, да лень. Может возьмешься?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

и еще — в практическом программировании имхо лучше не выпендриваться с визитором, а модифицировать код для добавления виртуальных функций

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Может возьмешься?

Попробовать можно. Только вот сам разберусь от и до с этим ADT...

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

Т.е. полного подобия нет?

Полное подобие есть. Корректнее было бы сказать «реализуется».

Begemoth ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

АлгТД это просто класс с замкнутым списком наследников и открытым списком виртуальных функций.

Виртуальные функции тут ни при чём. Сопоставление с образцом - просто вариант переключателя (switch), который удобно использовать с АТД.

и еще — в практическом программировании имхо лучше не выпендриваться с визитором, а модифицировать код для добавления виртуальных функций

Это зачастую нарушает модульность программы. Хотя конечно визиторы довольно неудобная вещь.

Begemoth ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

final class в яве конечно есть, но дженерики это не шаблоны

При чём тут дженерики и шаблоны?

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.