|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
Двойная диспетчеризация :)31.03.2013, 04:27. Показов 16596. Ответов 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
|
|||||||||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,299
|
||||||
| 19.03.2021, 12:53 | ||||||
|
JeyCi, а так не нравится? )
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 19.03.2021, 13:23 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||
| 19.03.2021, 13:33 | |||
|
Добавлено через 3 минуты это пока нет... пока туда не положить объекты, расположенные на куче... и обёрнутые в смарт-пойнтеры... но ваше уточнение приму на заметку
0
|
|||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,299
|
|
| 19.03.2021, 13:35 | |
|
JeyCi, компилятор доволен )
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 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
|
||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 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
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 22.03.2021, 14:50 | ||||
|
std::variant сам по себе скорее всего не при чем. Покажете код, на котором возникает эта проблема? Добавлено через 3 минуты
1
|
||||
| 22.03.2021, 14:50 | |
|
двойная буферизация Двойная буферизация на С++ двойная буферизация Двойная спираль в C++ двойная сортировка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|