|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
Двойная диспетчеризация :)31.03.2013, 04:27. Показов 16546. Ответов 45
Метки нет (Все метки)
Здорова!
Я тут от пытаюсь понять такое понятие взаимодействия классов или хз как назвать, вообщем что такое двойная диспетчеризация. Так сказать. 4 статьи как бы так бегло прочитал но никак нимогу врубиться, что это такое. Кто может простыми словами объяснить, что это такое? Добавлено через 49 секунд Щас голова тяжолая фиг шо варит ![]() Добавлено через 1 минуту И еще хочу попытаться смоделировать на примере простых классов.
0
|
|
| 31.03.2013, 04:27 | |
|
Ответы с готовыми решениями:
45
Двойная сумма на C++ двойная табуляция |
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||||||||
| 19.03.2021, 12:43 | |||||||||||||
явно не упрощается - ведь лямбда - анонимная функция -- нужен ещё один уровень обобщения, выделяющий конкретную лямбду из всех перегрузок (например из аргумента)Кликните здесь для просмотра всего текста
по сравненю с вариантом Посетителя без лямбд Кликните здесь для просмотра всего текста
Добавлено через 4 минуты
0
|
|||||||||||||
|
фрилансер
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
|
||||||
| 19.03.2021, 12:53 | ||||||
|
JeyCi, а так не нравится? )
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 19.03.2021, 13:23 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 19.03.2021, 13:33 | |||
|
Добавлено через 3 минуты это пока нет... пока туда не положить объекты, расположенные на куче... и обёрнутые в смарт-пойнтеры... но ваше уточнение приму на заметку
0
|
|||
|
фрилансер
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
|
|
| 19.03.2021, 13:35 | |
|
JeyCi, компилятор доволен )
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 19.03.2021, 14:23 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 19.03.2021, 20:46 | |||
error: cannot convert 'LambdaVisitor<Visitor<Cat, Dog>, Visitor<Cat, Dog>, walk(Pet&)::<lambda(auto:1*)> >' to 'PetVisitor&' {aka 'Visitor<Cat, Dog>&'}на следующую строку после вашего auto v - p.accept(v);Добавлено через 8 минут Добавлено через 5 минут просто всё началось с этой задачи... думается мне, что там как-то ответ с точностью до наоборот дан?.. т.е. иерархию надо делаь по Element (crtp), а перегрузку вставить в helper (и возможно, и не нужно будет городить иерархию от helper)... что-то не даёт тот код спокойно вздохнуть... ведь может пригодиться
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 20.03.2021, 19:56 | |||
в общем не понятно, зачем там 2ая иерархия - если она всё равно ElementAEditor или ElementBEditor... соответствующие Edit() можно засунуть и в сами ElementA или ElementB подклассы 1ой иерархии... как-то очень за уши там притянута задача к 2м иерархиям...- а если и будут нужны 2 иерархии, то паттерн Мост - это уже совсем др. тема... а паттерн Посетитель - это, действительно, не по той задаче
... в общем, пока не люблю задачи, оторванные от жизни... при случае пересмотрю на своих реалиях... случай - это возникновение реальной проблемы, требующей решения подобным (посетитель) образом [нужность выделения алгоритма в отдельный интерфейс, например, по причине частых изменений в алгоритмах]... или на досуге... всем спасибо за view Добавлено через 4 минуты p.s. а ведь всё равно, что лишний балласт перенести в pImpl - только это др. балласт (алгоритмический) и перенести предлагается в отдельную иерархию, если всё-таки разрастётся... в отличие от pImpl, который private part в отдельный класс... - просто для ускорения частичной перекомпиляции проекта - так и Посетитель может пригодится
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||||
| 21.03.2021, 16:40 | |||||||||
Добавлено через 53 минуты
Добавлено через 7 минут ? на заметку
и вариант для всё-таки творческого подхода на habr'e - чтобы уж точно инжинерное дело довести до логического конца...
0
|
|||||||||
|
0 / 0 / 0
Регистрация: 21.03.2021
Сообщений: 2
|
|
| 21.03.2021, 16:44 | |
|
здравствуйте, я новичок на этом сайте, подскажите пожалуйста как создать новую тему (задать вопрос)
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 21.03.2021, 19:23 | |
|
kote5615, вы тоже найдите вверху слева вкладку Правила!.. под ней найдёте всё остальное, что вам надо, - изучите страницу, прежде, чем изучать язык, - её дизайн - тоже высшее достижение инженерной мысли и ювелирного мастерства... - дерзайте, изучайте...
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||||
| 22.03.2021, 10:58 | ||||||||
т.е., в принципе, совместное использование std и Upp - реально... и куча уже не страшна всем спасибо!... как уже цитировала где-то:
0
|
||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 22.03.2021, 11:17 | ||
|
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 22.03.2021, 11:35 | |
|
ну в сигнатуре ссылки имела ввиду... а передаются в функцию да - копии здесь... зачем мне выдёргивать из One сами объекты (на куче), если One их прекрасно удалит сам... а копии в функции удалятся при выходе из scope функции...
просто в методах One - по сигнатуре operator*() возвращает const T&, которая (ссылка) и отправляется в аргументы функции... над exceptions в bool intersect, наверно, ещё подумать надо (но, ясно, - даже swap-ить не придётся - т.к. возвращать ничего из полученных в функцию объектов не придётся) ... хотя идиома swap - для конструкторов и деструкторов... но, думаю, здесь в классах arc() и line() она тоже не пригодиться... имхо?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 22.03.2021, 11:37 | |||||||
1
|
|||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 22.03.2021, 11:51 | ||
Upp::One<std::variant<line,arc>>* вроде на это using element = std::variant<line, arc>; ... вобщем, попробую ещё ![]() Добавлено через 2 минуты придётся в сами line и arc классы вставлять оборачивание в One<>
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||
| 22.03.2021, 12:12 | ||||||
|
JeyCi, если std::variant нужен только в качестве диспетчера внешних объектов, чтобы сработал visit, то можно сделать так:
1
|
||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 22.03.2021, 14:43 | |
|
НЕТ, просто для std::variant - One<T> - это вообще не тип!... std::variant потом ни declval не может сделать, ни __variants.valueless_by_exception() - вообще ничего не может сделать с типом One ... выдаёт
template argument deduction/substitution failed: и дальше везде ссылается на то, что с One<T> ничего не может сделать... тут без обёртки отправлять в функцию лучше... но т.к. в Upp в принципе в большинстве своём ничто не создаётся через new, а предпочтительно в контейнерах, то указатели используются только если для указания на объект, а не на место в куче... поэтому и не могу смоделировать отправку в функцию intersect и в обработку variant_visit указатель на место в куче... пока ещё не добралась до кучи в Upp (да и не советуют они)...ваш последний вариант работает так же, как мой #33... ref_wrapper приму на заметку- спасибо... но думается мне, что тут главное Правильно проходить boundary (условно говоря) между 2мя namespaces... не пытаться скармливать STD то, что она в глаза не видела т.е. One<T>...P.S. если уж ну очень сильно придётся создать что-то на куче, то создавать природные для STD вещи и заворачивать в её родные smart-pointers
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 22.03.2021, 14:50 | ||||
|
std::variant сам по себе скорее всего не при чем. Покажете код, на котором возникает эта проблема? Добавлено через 3 минуты
1
|
||||
| 22.03.2021, 14:50 | |
|
двойная буферизация Двойная буферизация на С++ двойная буферизация Двойная спираль в C++ двойная сортировка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли
Введение: Экологический рынок как игра с нулевой суммой
Традиционная экология долгое время. . .
|
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ
Введение: Синдром «цифрового учебника»
Современные большие языковые модели (LLM) обладают колоссальным. . .
|