|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov void* data в обычных деревьях и ЯП высокого уровня в дереве на каждой ноде void* data - дополнительное поле. Я этой либе я такого не увидел. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:12 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC SharpИли работает как раньше? С умными указателями - нужен общий предок. Иначе деструкторы не сработают. Но в Дельфи, на которую ты ссылаешься, Data - неумный указатель. PS: PetroNotC Sharpв обычных деревьях и ЯП высокого уровня в дереве на каждой ноде void* data - дополнительное поле. Тут ты явно хотел сказать "в каждой Дельфи", поскольку шарп позаимствовал оттуда VCL чуть менее чем полностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:15 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, В принципе мне деструкторы и нужны ручные. Автоматические сильно жизнь портили в COM когда то. Убираем дерево и очищаем data вручную. ... Ну дак все заимствуют хорошее. Поле данных прицепом везде приятно и везде есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 19:36 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky petrav Эти перегрузки — это прямой аналог оператора switch от типа объекта. В отличие от switch, variant не дает пропустить обработку типов. Это принципиальная разница. Так что это и близко не аналог switch. Да ну? Как же Ваш std::visit не аналог switch, если он выглядит как статический аналог switch? И он им и является. Я уж не говорю про то, что при разработке ООП как раз и хотели отойти от множественных switch по типу объекта разбросанных по всей программе. Вы говорите: не будет компилироваться? Ну так gcc выдаёт варнинг о том что switch не полон по отношению к enum. Блин, какая тут разница, если нарушены основы всех основ? Что там с принципом подстановки Лисков? Anatoly Moskovsky По решаемой задаче это как раз аналог полиморфизма с абстрактными методами, которые подтипы должны реализовать. Нет. Потому что принцип подстановки Лисков. То что вы предложили — это switch от типа объекта. Это нарушение принципов ООП. ИМХО. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 22:28 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav, У ООП всего три принципа. Какое нарушено? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 22:40 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav Нет. Потому что принцип подстановки Лисков. То что вы предложили — это switch от типа объекта. Это нарушение ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 22:57 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
И даже если рассматриваемые объекты могут быть порождены друг от друга, классический паттерн Visiter от банды четырех (по крайней мере для C++) предполагает отдельный специально именованный метод-обработчик для каждого типа во избежание нарушения этого принципа. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:17 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad И даже если рассматриваемые объекты могут быть порождены друг от друга, классический паттерн Visiter от банды четырех (по крайней мере для C++) предполагает отдельный специально именованный метод-обработчик для каждого типа во избежание нарушения этого принципа. Во-первых не «Visiter», а «Visitor». Во-вторых. Что это за идеология такая: объекты порождены друг от друга? Это что такое? Эмуляция (имитация) эволюции или что-то другое? Я не очень понимаю о чём вы говорите. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:27 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav, Да. Опечатался. Да, для объяснения отношения наследования между классами рассматриваемых объектов мне стоило выразиться корректнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:36 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad petrav, Да. Опечатался. Да, для объяснения отношения наследования между классами рассматриваемых объектов мне стоило выразиться корректнее. Отлично. Я даже больше скажу. Паттерн «Visitor (Посетитель)» — это костыль. Вынужденная мера, когда наша (или чужая) иерархия классов настолько сложна, что блин, легче прикрутить некоего пофигичного посетителя, который что-то за нас решит. Но, да, пожертвовав принципами ООП. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:47 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav Паттерн «Visitor (Посетитель)» — это костыль. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:52 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad petrav Паттерн «Visitor (Посетитель)» — это костыль. Ну, плиз, приведите простейший пример зачем это нужно. Ну я думаю это не займёт больше двадцати строчек? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2021, 23:56 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav Ну, плиз, приведите простейший пример зачем это нужно. Ну я думаю это не займёт больше двадцати строчек? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Все визитеры релизуют один и тот же интерфейс. P.S. Поэкспериментировал с std::variant, засунув туда классы Base, Derived и объект класса Standalone вне иерархии. Нарушить принцип Liskov мне не удалось. А Вам? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 00:27 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad P.S. Поэкспериментировал с std::variant, засунув туда классы Base, Derived и объект класса Standalone вне иерархии. Нарушить принцип Liskov мне не удалось. А Вам? Я Вас попросил привести простой и наглядный пример про паттерн Посетитель. Просто 20-30 строчек простейшего кода. А что я получил? Какие-то рассуждения про OpenGL, Metal и Вулкан? Я должен в них разобраться? Я прошу Вас привести простой и наглядный пример нужности паттерна Посетитель. Лучше что бы он не нарушал принципы SOLID. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 00:35 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, При этом я не иронизирую. Мне действительно интересно ваше решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 00:37 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav, Я утомился. Забудьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 00:45 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad petrav, Я утомился. Забудьте. :) Ну ничего страшного. Завтра будет новый день, Вы отдохнёте и может мы продолжим разговор про супер паттерн Посетитель. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 01:27 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
petrav, Если из примеров выше не понятно почему visit аналог именно полиморфизма, а не switch то вот вам попроще пример. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 10:28 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, Прикольно. Полиморфизм с абсолютно несвязанными типами. Этакое безалкагольное пиво)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2021, 11:07 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Anatoly Moskovsky пропущено... Код: plaintext 1. 2. 3.
Если речь про эту ошибку то - так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Ну или подскажите как студию перключить на С++11 и я буду копать как решить мою проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 11:20 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Siemargl PetroNotC Sharp, Ну ты то умнее IDE... Или нет? Я шаблоны не писал ещё) В студии параметр функции IDE! показывает как Код: plaintext 1.
В Qt Код: plaintext 1. 2.
Это где прописано что в зависимости от версии компилятора тип ссылки меняется? В шаблоне? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 11:50 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Anatoly Moskovsky, Прикольно. Полиморфизм с абсолютно несвязанными типами. Этакое безалкагольное пиво)))) Похоже на параметрический полиморфизм в ФП. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 12:13 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
mayton, Ну, с этип вариантом там и лямды идут. Поэтому да. Недалеко)) Передний край в С++)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 12:26 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Хммм. Погуглил - нельзя заставить студию работать до С++17. Только поставить 2008))) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 16:21 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
В отношении вопроса почему не работало, отвечаю что сам виноват. Не обратил внимания что в рабочих примерах наш профи сменил тип входящего в шаблон)) Было tree <базовыйКласс> а стало tree <std:: умныйУказатель на него ))) Для 11 версии поставил Код: plaintext 1.
Далее. Я собирался определять что это лист дерева, либо по имени класса либо добавит вирт функцию дайМнеТипУзла. Но в появившемся динамическом кастинге уже все есть. if (если null то нет наследника). Работает. ЗЫ. Как переключать студию на раннюю версию C++ вопрос актуальный. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 17:48 |
|
|
start [/forum/topic.php?fid=57&msg=40074074&tid=2017202]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 188ms |
0 / 0 |