Описание тега 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#?

Я слышал / читал термин, но не совсем понял, что это значит. Когда я должен использовать эту технику и как я буду ее использовать? Кто-нибудь может предоставить хороший пример кода?
1 ответ

Метод с двумя параметрами, которые нужно отправить дважды

Допустим, у меня есть метод, который имеет два параметра. я реализую их как: if(aObj instance of Marble) { if(bObj instance of Bomb) { this.resolve((Marble)aObj,(Bomb)bObj); } } как вы видите, это не очень красивое решение. Я планирую реализовать с …
1 ответ

Большая Pythonic двойная отправка для извлечения Посмотреть информацию из модели

Я пишу настольное приложение на Python и Qt, используя PySide. Мне нужно отобразить древовидное представление, в котором элементы верхнего уровня являются объектами другого типа, чем их дочерние элементы. В частности, элемент верхнего уровня - это G…
0 ответов

Есть ли C++/CLI, эквивалентный C# приведению к динамическому типу?

Я расширяю иерархию классов, написанную на C#, которая реализует шаблон Visitor (двойная диспетчеризация) с использованием динамического ключевого слова, как описано здесь. Вот очень упрощенный псевдокод того, что я сейчас делаю в C#: public class C…
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…
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 ответа

Смешение двойной отправки и статического полиморфизма

Я уверен, что это плохая идея. Давайте представим, что у меня есть веская причина для этого. У меня есть дерево узлов, которое успешно использует статический полиморфизм для передачи сообщений. Важно отметить, что каждый узел не может типы узлов, к …
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) или…