tag:blogger.com,1999:blog-10303035.post3943725793355970631..comments2024-02-04T23:20:04.066+03:00Comments on Алёна C++: МультиметодыAlenahttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-10303035.post-6878891198046137422007-12-06T21:37:00.000+03:002007-12-06T21:37:00.000+03:00Для того, чтобы понять что такое настоящие мультим...Для того, чтобы понять что такое настоящие мультиметоды, надо в первую очередь посмотреть на CLOS - Common Lisp Object System. Вот там можно изменить поведение любого класса не затрагивая его кода напрямую. а пре- и пост- методы, это вообще просто праздник какой-то :-)Alex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-88284703363028078602007-05-03T17:59:00.000+04:002007-05-03T17:59:00.000+04:00Подумалось мне, что можно и без "загрузочного" Але...Подумалось мне, что можно и без "загрузочного" Александреску ;) обойтись, смотрю<BR/>Meyers, "More effective C++" - и точно, Item 31 "Making functions virtual with respect to more than one object." <BR/>Разные способы, подробно, но без загруза ;)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-54812133692478973552007-05-03T16:40:00.000+04:002007-05-03T16:40:00.000+04:00Да чего тут сравнивать с питоном, питон, как динам...Да чего тут сравнивать с питоном, питон, как динамический язык, в таких вещах на стотыщ очков впереди :)<BR/><BR/>Я смотрю из языков со статической типизацией multiple dispatch только Nice поддерживает. И то у меня есть очень субъективное такое предчуствие что в таких языках от этого больше граблей чем пользы.lrrrhttps://www.blogger.com/profile/12742106367384624657noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-91060942718230241922007-05-03T15:47:00.000+04:002007-05-03T15:47:00.000+04:00Ах вот, что это такое... Как только стала понятна ...Ах вот, что это такое... Как только стала понятна суть, я пошел нашел, как это делается в Питоне, вдруг кому интересно будет. Способ от создателя Питона <A HREF="http://www.artima.com/weblogs/viewpost.jsp?thread=101605" REL="nofollow">Five-minute Multimethods in Python</A>. <BR/><BR/>Вкратце это работает так. В основе все то же определение типа в духе "if это Rectangle and это Circle: вызывать это". Но поскольку это Питон, там можно получить программный доступ не только к типам, но и к имени функции, и к процессу ее "компиляции". Поэтому вместо написания руками здоровенного if нужные функции помечаются некой аннотацией, и функция при создании во-первых регистрируется в map'е со всеми типами своих параметров, а во вторых на ее место в коде подставляется вызывальщик, который будет эти параметры проверять :-).<BR/><BR/>Вот. Нам не надо ждать, пока язык расширят :-)Ivan Sagalaevhttps://www.blogger.com/profile/08658726720189436784noreply@blogger.com