Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Матрица указателей на функции пересечения примитивов по идентификаторам, хранящимся в объекте (ad hoc rtti).
...
ПК>Достоинства: максимальная производительность, возможность добавления поиска пересечений новых примитивов без модификации исходных классов. ПК>Недостатки: слабая интеграция с языком, в частности, невозможность поиска пересечений объектов унаследованных классов, необходимость поддержания набора уникальных идентификаторов.
, если интересно, реализованна мульти диспетчиризации построенная на N-мерном массиве указателей, с автоматическим заполнением и с устранением недостатка создания уникальных идентификаторов. Есть правда другой недостаток — создание списка используемых типов.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Наиболее практичным и гибким подходом, на мой взгляд, является использование RTTI с последующим "сползанием" в ту или иную форму таблицы функций.
Павел, не могли бы Вы пояснить свою мысль фрагментом кода?
Re: вопрос по объектно-ориентированному пронраммирован
У меня в движке так сделанно... никаких двойных виртуальных фунций, ибо отсекать нужно максимально быстро...
Сорри, не могу сделать копи-паст, так что реализация не реализованна
Я заранее знал, что у меня есть только шары и бибоксы
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте Albatross, Вы писали: ПК>(Вопрос об организации поиска пересечений геометрических примитивов.)
ПК>Мультиметоды — одна из фундаментальных проблем C++.
Я думаю, это не проблема языка, как такового.
ПК>На сегодняшний день можно выделить три способа решения задач связанных с множественной диспетчеризацией, и, в частности, поиска пересечений.
Не могу удержаться. Я тут недавно постил свой сэмпл
Здравствуйте, Шахтер, Вы писали:
ПК>>Мультиметоды — одна из фундаментальных проблем C++.
Ш>Я думаю, это не проблема языка, как такового.
Это проблема ООП вообще.
Для "монометодов" диспетчеризация не представляет сложности: все классы в иерархии частично упорядочены, и можно всегда сказать, какая реализация метода должна быть вызвана.
А для мультиметодов — приходится вводить частичный порядок над кортежами классов (как минимум, над парами).
Который учитывает уже имеющийся частичный порядок самих классов — во-первых;
Который как-то разруливает неоднозначности — во-вторых;
Который выдерживает масштабирование (добавление новых классов) — в-третьих.
Есть разные реализации мультиметодов.
Самые популярные — это
1. Обработчик-сообщение (преимущество первого аргумента)
2. Двойная диспетчеризация (преимущество второго аргумента)
3. Первый подошедший (в порядке регистрации сигнатур)
4. Точное совпадение (всё, что не подошло — вызывает дефолт)
отличающиеся в первую очредь порядком (а уже потом — техникой воплощения).
Ну и ещё пару схем могу привести, но они затейливые.
Короче говоря, перед тем, как кодировать мультиметоды — нужно объяснить себе, что же в самом деле должно происходить между каждой парой классов. А не только между теми, для которых существуют сигнатуры мультиметода.