Описание тега double-dispatch
В разработке программного обеспечения двойная диспетчеризация - это особая форма множественной диспетчеризации и механизм, который отправляет вызов функции различным конкретным функциям в зависимости от типов времени выполнения двух объектов, участвующих в вызове. В большинстве объектно-ориентированных систем конкретная функция, которая вызывается из вызова функции в коде, зависит от динамического типа отдельного объекта, и поэтому они известны как вызовы одиночной диспетчеризации или просто вызовы виртуальных функций.
0
ответов
В шаблоне посетителей отсутствуют параметры
Я уверен, что это должно быть общая проблема с шаблоном Visitor, поэтому подумал, что я посмотрю, есть ли стандартное решение. Как вы можете перекодировать обход дерева, когда методы встроены в сами классы дерева, скажем class Node { void Traverse(S…
05 июл '10 в 23:38
4
ответа
C++ двойная диспетчеризация с зеркальными иерархиями
Следующие иерархии классов представляют абстрактный обработчик ресурсов и иерархии ресурсов. Оба имеют интерфейсы в качестве базовых классов. Теперь представьте, что вы пишете систему, в которой вы можете реализовать несколько конкретных систем ресу…
28 фев '10 в 16:45
1
ответ
Как вызвать функцию динамически с аргументом полиморфизма
Как я могу динамически вызывать функцию вида:childA.function(childB) в то время как их статические типы у обоих родителей? и с более подробной информацией: У меня есть физический проект, где мне нужно рассчитать потенциал 2 молекул. Но у меня есть 2…
03 июл '17 в 10:27
4
ответа
Двойная отправка в C#?
Я слышал / читал термин, но не совсем понял, что это значит. Когда я должен использовать эту технику и как я буду ее использовать? Кто-нибудь может предоставить хороший пример кода?
03 сен '08 в 21:03
1
ответ
Метод с двумя параметрами, которые нужно отправить дважды
Допустим, у меня есть метод, который имеет два параметра. я реализую их как: if(aObj instance of Marble) { if(bObj instance of Bomb) { this.resolve((Marble)aObj,(Bomb)bObj); } } как вы видите, это не очень красивое решение. Я планирую реализовать с …
19 май '10 в 09:57
1
ответ
Большая Pythonic двойная отправка для извлечения Посмотреть информацию из модели
Я пишу настольное приложение на Python и Qt, используя PySide. Мне нужно отобразить древовидное представление, в котором элементы верхнего уровня являются объектами другого типа, чем их дочерние элементы. В частности, элемент верхнего уровня - это G…
10 ноя '12 в 23:13
0
ответов
Есть ли C++/CLI, эквивалентный C# приведению к динамическому типу?
Я расширяю иерархию классов, написанную на C#, которая реализует шаблон Visitor (двойная диспетчеризация) с использованием динамического ключевого слова, как описано здесь. Вот очень упрощенный псевдокод того, что я сейчас делаю в C#: public class C…
07 дек '16 в 03:53
2
ответа
Сравнение типов в C++: typeid против двойной отправки dynamic_cast
Существуют ли какие-либо причины для производительности или надежности, чтобы отдавать предпочтение одной над другой? #include <iostream> #include <typeinfo> struct B { virtual bool IsType(B const * b) const { return IsType2nd(b) &&a…
12 фев '16 в 19:55
1
ответ
Выбрать / использовать реализацию интерфейса с универсальным параметром на основе типа другого объекта
Я работаю над системой обработки событий: public interface IEvent { ..} public class CreateUserEvent : IEvent {...} public class ChangeUserNameEvent : IEvent {...} Каждое событие имеет определенный обработчик public interface IEventHandler<T> …
20 июл '15 в 21:57
1
ответ
"Двойной полиморфизм": шаблон двойной отправки или просто шаблон посетителя?
У меня есть class BC_TOYFD { public: BC_TOYFD( BS_TOYFD * pBS, BC2 dBC2 ); virtual ~BC_TOYFD( void ) ; BS_TOYFD * _pBS ; BC2 _dBC2 ; double _PDA ; // store price down approximation double _PUA ; // store price up approximation virtual void COMPUTEBV…
04 авг '13 в 21:24
2
ответа
Двойная отправка и фабричный образец
У меня есть следующий код в настоящее время (не работает): #include <iostream> #include <vector> class Circle; class Rectangle; class Shape { private: Shape() {}; public: virtual ~Shape() {}; friend class Circle; friend class Rectangle; …
07 мар '15 в 07:35
5
ответов
Разница между образцом посетителя и двойной отправкой
Я читаю о шаблоне посетителя, и он выглядит так же, как Double Dispatch. Есть ли разница между ними? Делать два термина означает одно и то же. ссылка: http://www.vincehuston.org/dp/visitor.html
22 мар '12 в 07:35
3
ответа
Двойная отправка выдает предупреждения "скрывает виртуальную функцию", почему?
Я хотел бы реализовать взаимодействия между двумя объектами, чьи типы являются производными от общего базового класса. Существует взаимодействие по умолчанию, и определенные вещи могут происходить, когда взаимодействуют объекты одного типа. Это реал…
14 апр '11 в 09:22
3
ответа
Java Class.cast() и перегрузка
Я пытаюсь закодировать прослушиватель пакетов для небольшого сервера. Я очень плохо знаком с Java, и это первый раз, когда я возиться с сетью. Идея состоит в том, чтобы получить пакет, сопоставить идентификатор пакета с его классом, передать входной…
09 янв '14 в 21:54
3
ответа
C++ Double Dispatch проблемы
Это вторая часть проблемы, которую я ранее задавал: возможно ли перегрузка полиморфного члена в C++? Используя пример Wiki, я создал этот пример. http://en.wikipedia.org/wiki/Double_dispatch Моя проблема в том, что скомпилированный код никогда не ищ…
12 янв '11 в 16:54
1
ответ
Двойная отправка в Фаро
Может ли кто-нибудь объяснить процесс двойной отправки в Pharo 4.0 с Smalltalk? Я новичок в Smalltalk, и мне трудно понять эту концепцию, поскольку она реализована в Java совершенно иначе, чем в Smalltalk. Будет очень полезно, если кто-нибудь сможет…
15 июн '15 в 17:56
2
ответа
Смешение двойной отправки и статического полиморфизма
Я уверен, что это плохая идея. Давайте представим, что у меня есть веская причина для этого. У меня есть дерево узлов, которое успешно использует статический полиморфизм для передачи сообщений. Важно отметить, что каждый узел не может типы узлов, к …
05 апр '17 в 00:27
1
ответ
Почему нам нужно принять () в шаблоне Visitor и почему мы не можем вызвать visitor.visit() напрямую?
Я пересматриваю шаблон Visitor, который использовал некоторое время назад. У нас есть базовый класс Element, у которого есть виртуальный метод accept(Visitor), и этот метод переопределяется во всех классах, наследуемых от Element. И все, что accept …
17 май '18 в 09:23
4
ответа
Двойная рассылка и шаблон класса
У меня есть код C++, где я сравниваю другой класс, производный от общего материнского класса, Foo, Если два класса имеют не один и тот же тип, сравнение всегда false, В противном случае он сравнивает некоторые внутренние данные, специфичные для данн…
24 апр '13 в 08:01
1
ответ
Двойная диспетчеризация для динамически типизированных операторов в JavaScript
Я хочу сформулировать алгебраические выражения таким образом, чтобы можно было заменить основные типы чисел. Если хотите, подумайте о комплексных числах, больших целых числах, матрицах и тому подобном. По этой причине я бы написал либо add(a, b) или…
28 ноя '13 в 13:14