На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 419 420 [421] 422 423 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Red @
    какие еще есть эффектные применения?
    Везде где требуется перегрузка, но с отложенным до ран-тайм выбором наиболее подходящего кандидата.

    Добавлено
    Нарыл вот.
      [quote=--Ins--,1331311075,3093267]Тут у нас недавно была дискуссия на тему диспетчеры и мультиметоды, а вообще да - посетитель самое очевидное. [/quote]
      Так сначала и сделал, на комбинации визиторов. Т.е. посетитель операции только решает какой из визиторов продукта вызвать.
      Но очень запутанно и страшно эта реализация выглядит. Хотя может быть я некошерно реализовал.
      Лучше пожалуй было бы сделать таблицу да искать в ней соответствие. Но это понял только посмотрев на код через неделю :)

      [/quote][quote=Qraizer,1331311033,3093266]+, Radagast![/quote]
      я поэтому и написал "вами" с маленькой буквы :)

      Добавлено
      [quote=--Ins--,1331311075,3093267]Ты можешь для класса WMSizeMessage, WMLButtonDownMessage и т.д (потомки Message) написать свой метод-обработчик, а потом вызвать мультиметод, передав ему экземпляр твоего Message, который на основании реального типа вызовет конкретный обработчик. Короче, еще одна возможность замены условной логики полиморфизмом[/quote]
      Да, прикольно :)

      Добавлено
      Тут надо перестраивать мышление )
        Цитата Red @
        Тут надо перестраивать мышление )


        Надо было быть дельфистом, изначально было бы перстроено :P Тро-ло-ло-ло-ло-ло-ло
          Цитата Red @
          Или об этом пишут в основном в контексте C++?
          Нет, конечно. В контексте C++ обычно дискутируют вокруг сравнения тех или иных их реализаций, ибо в языке их нет, а самому написать можно по-всякому. Есть языки, где мультиметоды поддерживаются явно, потуги отдельных товарищей ввести их в язык в новом Стандарте Комитет почему-то отверг.
            Цитата Qraizer @

            Да, чОтко все разложил )

            Добавлено
            Цитата --Ins-- @
            Ты можешь для класса WMSizeMessage, WMLButtonDownMessage и т.д (потомки Message) написать свой метод-обработчик, а потом вызвать мультиметод, передав ему экземпляр твоего Message, который на основании реального типа вызовет конкретный обработчик. Короче, еще одна возможность замены условной логики полиморфизмом

            Еще есть языки (правда не знаю какие, просто где-то видел упоминание, в Немерле точно есть), что можно задать ограничение на входные параметры. Например, если сообщения приходят в виде целочисленных констант (т.е. классов у нас нет), то пишешь несколько методов, в которых указаываешь, что такой-то метод будет вызван при таком значении константы (в общем случае каком-то условии).
              Цитата Red @
              Еще есть языки (правда не знаю какие, просто где-то видел упоминание, в Немерле точно есть), что можно задать ограничение на входные параметры. Например, если сообщения приходят в виде целочисленных констант (т.е. классов у нас нет), то пишешь несколько методов, в которых указаываешь, что такой-то метод будет вызван при таком значении константы (в общем случае каком-то условии).


              В c# ты можешь реализовать такое поведение сам, в принципе, используя атрибуты и System.Reflection. И я думаю что такая задача, где так поступить будет оправдано, возникнуть может
                Цитата --Ins-- @
                В c# ты можешь реализовать такое поведение сам, в принципе, используя атрибуты и System.Reflection. И я думаю что такая задача, где так поступить будет оправдано, возникнуть может

                Атрибуты можно применять и к параметрам методов, да. Но ведь это не позволит создать перегрузки для разных значений параметров.
                Или ты имеешь ввиду что-то иное?
                  Цитата Red @
                  Атрибуты можно применять и к параметрам методов, да. Но ведь это не позволит создать перегрузки для разных значений параметров.
                  Или ты имеешь ввиду что-то иное?


                  Нет, атрибут именно к методу - например пометить атрибутом что данный метод обрабатывает параметр со значением таким-то. А потом по значению атрибута найти нужны метод. Ну например:
                  ExpandedWrap disabled
                    class Test
                    {
                        [MessageHandler(WM_SIZE)]
                        private void WMSize(Message msg)
                        {
                           ....
                        }
                        [MessageHandler(WM_PAINT)]
                        private void WMPaint(Message msg)
                        {
                           ....
                        }
                        [DefaultMessageHandler()]
                        private void DefaultHandler(Message msg)
                        {
                            // Можно вызвать DefWindowProc, к примеру
                        }
                     
                        public void Dispatch(int msgID, Message msg)
                        {
                            // Ищем по значению msgID нужный обработчик и вызываем
                            // Если метод не найден - вызываем DefaultHandler
                            // Таблицу для поиска метода можно сформировать единожды, например, в классовом конструкторе
                        }
                    }
                  Сообщение отредактировано: --Ins-- -
                    Цитата Red @
                    Еще есть языки (правда не знаю какие, просто где-то видел упоминание, в Немерле точно есть), что можно задать ограничение на входные параметры. Например, если сообщения приходят в виде целочисленных констант (т.е. классов у нас нет), то пишешь несколько методов, в которых указаываешь, что такой-то метод будет вызван при таком значении константы (в общем случае каком-то условии).

                    CLOS например:
                    ExpandedWrap disabled
                      (defmethod foo ((x (eql 1)))
                        (format t "One~%"))
                       
                      (defmethod foo ((x (eql (+ 0 2))))
                        (format t "Two~%"))
                       
                      (defmethod foo ((x number))
                        (format t "Some number~%"))
                       
                      (dolist (x '(1 2 3))
                        (foo x))

                    =>
                    ExpandedWrap disabled
                      ~ $ sbcl --script test.lisp
                      One
                      Two
                      Some number
                      ~ $
                      А в C++ можно сделать что-то подобное?

                      ExpandedWrap disabled
                        class A {
                        public:
                            static const string name = "A";
                        };
                         
                        class B {
                        public:
                            static const string name = "B";
                        };
                         
                        class fabric(string name, class... cls) {
                            for(class c : cls) {
                                if(c::name == name)
                                    return c;
                            }
                         
                            ???
                        }
                         
                        fabric("A", A, B);


                      В Delphi, как я понимаю можно :)

                      Добавлено
                      Да, с CLOS'ом просьба не беспокоить :)
                        Мяут-Настоящий, ну, списки типов, variadic template и их совмещение - только это статика, а судя по коду, он навеян динамикой питона :)
                          Цитата Мяут-Настоящий @
                          А в C++ можно сделать что-то подобное?

                          Сделать что-то подобное всегда можно :)
                          Только в С++ класс не является объектом времени выполнения. Недостаток это или нет? Думаю, что недостаток, но не критичный для сферы применения языка. Кроме того, это стимулирует работу с типами во время компиляции, а не исполнения, что так же хорошо для ниши языка.
                          Основным негативным последствием данного решения является то, что если тебе нужна развитая и прозрачная объектная система в рантайме, то тебе придется велосипедить. В стандартную библиотеку бы, кстати, могли добавить какую-нибудь библиотечную реализацию объектной модели времени выполнения с нулевой стоимостью неиспользования...
                            Цитата --Ins-- @
                            Тро-ло-ло - а в Delphi такой проблемы нет :tong:

                            В Дельфи просто конструкторы ущербные. В нормальных языках (Шарп, Джава, плюсы) переменным можно задавать значения в месте декларации, и не нужно пихать все в одну клоаку под названием конструктор.
                              Цитата D_KEY @
                              Цитата Мяут-Настоящий @
                              А в C++ можно сделать что-то подобное?

                              Сделать что-то подобное всегда можно :)
                              Только в С++ класс не является объектом времени выполнения. Недостаток это или нет? Думаю, что недостаток, но не критичный для сферы применения языка. Кроме того, это стимулирует работу с типами во время компиляции, а не исполнения, что так же хорошо для ниши языка.
                              Основным негативным последствием данного решения является то, что если тебе нужна развитая и прозрачная объектная система в рантайме, то тебе придется велосипедить. В стандартную библиотеку бы, кстати, могли добавить какую-нибудь библиотечную реализацию объектной модели времени выполнения с нулевой стоимостью неиспользования...

                              Не похоже и что он является объектом времени компиляции, либо является слишком простым объектом, без развитых средств работы с ним.
                                Цитата korvin @
                                Не похоже и что он является объектом времени компиляции, либо является слишком простым объектом, без развитых средств работы с ним.

                                Отдельных средств, в общем-то, и нет. Так получилось, что таким средством стали шаблоны, которые изначально предназначались просто для обобщенного кода.
                                На практике этого вполне достаточно. Опять же, с учетом ниши.
                                Сообщение отредактировано: D_KEY -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 419 420 [421] 422 423 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5753 ]   [ 15 queries used ]   [ Generated: 29.07.26, 20:30 GMT ]