powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / К виртуальным функциям
25 сообщений из 106, страница 2 из 5
К виртуальным функциям
    #39410565
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbDimitry SibiryakovЛично я бы ожидал, что ошибка компиляции возникнет ещё раньше, когда идёт переопределение
метода с другой сигнатурой.по идее, explicit решает эту проблему
MasterZivКстати, я видел в сети предложение в стандарт для реализации в С++ множественной диспетчеризации в виртуальных методах, вот это была бы бомба!А можно подробнее описать, что это?


Выбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39410566
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivи часто ты наследуешься от контейнеров и что-то там переопределяешь?
как гуи займёшься так почти стабильно нужно
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39410581
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)MasterZivи часто ты наследуешься от контейнеров и что-то там переопределяешь?
как гуи займёшься так почти стабильно нужно

расскажи нам об этом (желательно в отдельном топике)
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39410592
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВыбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже.Интересная идея.
А насколько часто нужен такой функционал? Т.е. когда типы параметров явно отличаются, мы делаем перегрузку функций, то тут всё ок. Остаются случаи, когда типы параметров находятся в иерархии классов. Но тут мы тоже можем явно написать функцию для каждого случая. В любом случае нам придётся писать такую функцию. Поэтому не совсем понятно, какая реализация диспетчеризации планировалась? В случае с this ответственность лежит на классе this, а что будет в случае остальных параметров?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39412855
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSashaMercuryпочему BS не сделал все методы виртуальными по умолчанию?

Производительность. Вызов виртуального метода это как минимум два лишних обращения к
случайному участку памяти. Кэши процессора не резиновые, а тогда их вообще не было.

Это единственная причина, или есть что-то ещё?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39413497
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbMasterZivВыбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже.Интересная идея.
А насколько часто нужен такой функционал? Т.е. когда типы параметров явно отличаются, мы делаем перегрузку функций, то тут всё ок.

что значит "часто нужен"?
это фундаментальное свойство объектной системы языка программирования. Если оно есть или его нет - это две большие разницы.

Остаются случаи, когда типы параметров находятся в иерархии классов. ?
Но тут мы тоже можем явно написать функцию для каждого случая.

ты не сможешь написать тут функцию.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39413580
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivты не сможешь написать тут функцию.тогда я, наверно, не совсем понял суть требуемой доработки.
Можно какой-нибудь пример для демонстрации?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39414224
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbMasterZivты не сможешь написать тут функцию.тогда я, наверно, не совсем понял суть требуемой доработки.
Можно какой-нибудь пример для демонстрации?

как ни странно, в Википедии есть довольно вменяемая статья на эту тему:
https://en.m.wikipedia.org/wiki/Multiple_dispatch?wprov=sfla1

Там описано даже предложение для C++.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39414457
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, как по мне, так слегка сомнительная концепция: один класс принимает решение о выборе метода на основе виртуальной таблицы объекта другого класса.
И таки это можно реализовать, вызывая внутри метода класса методы объектов и выполняя нужный функционал там. Будет выглядеть запутанно, да, но реализовать можно. Второй вариант: определение типа параметров перед вызовом метода + перегрузка(там же в вики пример на с++).
Ну и всё-таки я не могу придумать, где оно может понадобиться.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39414746
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbНу и всё-таки я не могу придумать, где оно может понадобиться.
В динамических языках перегрузку можно реализовать только мультидиспетчем.
Нафиг это в С++ - это большой вопрос ))
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39414929
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbMasterZiv, как по мне, так слегка сомнительная концепция: один класс принимает решение о выборе метода на основе виртуальной таблицы объекта другого класса.


Кто тебе сказал, что это делает ОДИН КЛАСС ?

CEMbИ таки это можно реализовать, вызывая внутри метода класса методы объектов и выполняя нужный функционал там. Будет выглядеть запутанно, да, но реализовать можно. Второй вариант: определение типа параметров перед вызовом метода + перегрузка(там же в вики пример на с++).
Ну и всё-таки я не могу придумать, где оно может понадобиться.

Там же дан пример о столкновении двух объектов при моделировании...
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415132
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКто тебе сказал, что это делает ОДИН КЛАСС ?В коде одного класса.MasterZivТам же дан пример о столкновении двух объектов при моделировании...пример не показательный, так как столкновение нормально делается по-другому(собственно, оно там и так сделано по-другому, но как эмуляция реализации идеи), и там множественная диспетчеризация не требуется.

Давайте ещё раз. Простой пример: есть класс X, с методом, принимающим параметр класса А. Класс А является корнем иерархии классов. Идея MD: мы пишем X::m(A a), X::m(B a), X::m(C a),... и внутри пишем реализацию на каждый класс иерархии. При выполнении рантайм понимает, что у нас за объект и вызывает соответствующий метод. Сейчас будет вызван метод X::m(A) всегда.

В примерах реализация делается за счёт определения класса через dynamic_cast внутри метода X::m.

У меня есть 2 замечания к самой идее: 1. Реализация класса X зависит от иерархии классов A. Это неправильно: в случае добавления класса в иерархию, возможно нужно будет править код в X, добавлять ещё один метод m.
К слову сказать, у меня есть работающий код "столкновения" двух объектов, в котором параметры столкновения передаются методу обработки классу самого объекта. Это "один" метод на все типы объектов, т.е. тут стандартная диспетчеризация
2. Класс X принимает решение об обработке в методе m на основе класса входящего параметра. Это допускается, но сомнительно.

Ну и, всё ещё не могу придумать пример.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415767
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,


Так и классы можно писать по-другому, на C, и никакой C++ не нужен...
А можно классы на ассемблерная писать, никакой C не нужен...
А можно еще данные самому в файл писать, никакая СУБД не нужна...
А зачем вообще компьютер, он же дорогой такой... Лучше на счетах считать!
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415768
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb[

У меня есть 2 замечания к самой идее: 1. Реализация класса X зависит от иерархии классов A. Это неправильно: в случае добавления класса в иерархию, возможно нужно будет править код в X, добавлять ещё один метод m.

2. Класс X принимает решение об обработке в методе m на основе класса входящего параметра. Это допускается, но сомнительно.

.

еще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ?

Сейчас ты пишешь виртуальную функцию, реализуешь ее в каком-то классе, затем она вызывается... у тебя же не возникает ощущение того, что какой-то другой класс принимает решение о вызове твоей реализации виртуальной функции? Нет, не возникает. Почему же оно у тебя возникает в случае MD ?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415769
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyCEMbНу и всё-таки я не могу придумать, где оно может понадобиться.
В динамических языках перегрузку можно реализовать только мультидиспетчем.
Нафиг это в С++ - это большой вопрос ))


вот это - дельное замечание...
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415982
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА зачем вообще компьютер, он же дорогой такой... Лучше на счетах считать!Всё упирается в востребованность. Компьютеры востребованы, счёты - нет. И есть куча примеров, где компьютеры справляются лучше, чем счёты. Но всё ещё нету примеров, где MD справляется лучше, чем то, что есть сейчас. Где примеры?
MasterZivеще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ?да, верно, это реализация С++. Но по первому замечанию я не согласен, т.е. это не в плане реализации MD, а в плане архитектуры приложения: в случае изменения иерархии классов А, нам (вероятно) надо менять код класса X. Когда мы работаем с объектами иерархии А через интерфейс, нам менять X не нужно.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39415994
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
еще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ?



Немного почитал статью про open multimethods.
Основная идея в том, что мультиметодом можно сделать только свободную функцию, не функцию класса. При этом все параметры, по которым будет идти диспетчеризация, помечаются ключевым словом virtual.

Поэтому все твои опасения напасны, это не будет реализацией какого-то класса.

Также там есть в самом начале примеры того, где OMM могла бы быть полезной, приводится пример системы кодирования изображения с подсистемой перекодирования изображения из одного формата в другой.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416008
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНемного почитал статью про open multimethods.там, оказывается, всё сложнее, чем я себе представлял.MasterZivПоэтому все твои опасения напасны, это не будет реализацией какого-то класса.да я не опасался, я просто думал, что если делать через метод, то архитектура будет не шибко иделальнойMasterZivТакже там есть в самом начале примеры того, где OMM могла бы быть полезной, приводится пример системы кодирования изображения с подсистемой перекодирования изображения из одного формата в другой.о, так под это подходят любые конверторы из чего-то во что-то. А так же какие-нибудь агрегаторы. Ну всё, можно делать!
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416075
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

... а также любой оператор присваивания...
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416102
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, а так же любой бинарный оператор...

ёпрст... как мы сейчас выживаем вообще без MD!?!
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416178
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbMasterZiv, а так же любой бинарный оператор...

ёпрст... как мы сейчас выживаем вообще без MD!?!

вот.
а между тем, это всего лишь рассказ про ту козу, для избавления от которой ее надо сначала завести.
Завели себе козу статической типизации с выдумыванием обрядов моления на нее, а теперь вопрос - как избавиться от той козы не методом ее продажи или съедения, а путем делания вида, что ее нет.

Достаточно ли не замечать козу, чтобы несовместимая с ней множественная диспетчеризация сама по себе появилась,
и тоже ту козу не заметила?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416522
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609" для рождения С++ из C with Сlasses"
20 лет назад я учился именно такому С++. Большинство фишек из 11,14, 17 версий уводят все дальше от этого базового уровня. Становясь более мощным, язык позволяет все более сложные концепции и приемы, это повышает требования к программистам, уменьшает их число, повышает порог вхождения, но от возможности выстрелить в ногу так и не избавляет полностью.
Мне кажется, что современный С++ можно рассматривать как ветку от базового, направленную в сторону расширения возможностей языка. И что есть потребность в языке, который был бы другой веткой от базового С++, в котором меньше было бы всяких возможностей в духе Алексндреску, но который был бы надежнее, но без реализации через виртуальную машину (как Java), с сохранением и производительности и возможностью работы с иерархиями классов.
Просто ООП себя исчерпало. В нём ковырялись 30 лет как в грязном пальце на ноге.
А всего-лишь родили сложное процедурное программирование с неявным this аргументом
и over 100500 правил с каким-то нагромождением рулов типа там правила поведения
protected и прочего говна типа конструкторы и деструкторы.
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416550
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609С++. Большинство фишек из 11,14, 17 версий уводят все дальше от этого базового уровня. Становясь более мощным, язык позволяет все более сложные концепции и приемы, это повышает требования к программистам, уменьшает их число, повышает порог вхождения
При ближайшем рассмотрении, сложность концепций в большинстве случаев вызывается нежеланием старперов изучать что-либо новое )))
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416556
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyЗавели себе козу статической типизации с выдумыванием обрядов моления на неенет ничего плохого в статической типизации :) Почему все обязательно становятся адептами или той или иной типизации? С++ хорош тем, что можно выбрать и настроить в нужном месте кода нужную типизацию. Или ненужную. И всё равно это будет работать!maytonПросто ООП себя исчерпало.а какие есть альтернативы? Концептуальные? Причём, чтобы можно было решать те же задачи, что решались с помощью ООП. Чем заменить ООП?
...
Рейтинг: 0 / 0
К виртуальным функциям
    #39416588
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbа какие есть альтернативы? Концептуальные? Причём, чтобы можно было решать те же задачи, что решались с помощью ООП. Чем заменить ООП?
Вы уже говорите с позиции замены всего-того что написано. А зачем заменять? Просто не надо так делать.
Реляционная алгебра (SQL/DDL) на 99.99% не использует ООП. И хотя базовые возможности ООП заложены
в какой-то там Ansi-200* SQL, его всё равно не используют ибо для бизнес-логики в слое DBMS на это
по большему насрать.

А в С++ большинство ООП-решений - это сплошное овер-проектирование.
ООП - фетиш. И персональный мозговой онанизм самого автора кода.
Просто ему (автору) нравится использовать ООП-паттернализм так-же как и Гоголевскому
Петрушке нравилось когда "буквы складываются в слова".

Выкосите большую половину ООП из вашего кода и ничего у вас не изменится.
Всё так-же будет работать.

Бизнесу по большему счету все равно что у вас под капотом. ООП или кортежи,
структуры, записи, сеты, data-rows.

Поэтому на вопрос "как сделать" у меня другой ответ - не делайте так.

Никогда не делайте.
...
Рейтинг: 0 / 0
25 сообщений из 106, страница 2 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / К виртуальным функциям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]