Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbDimitry SibiryakovЛично я бы ожидал, что ошибка компиляции возникнет ещё раньше, когда идёт переопределение метода с другой сигнатурой.по идее, explicit решает эту проблему MasterZivКстати, я видел в сети предложение в стандарт для реализации в С++ множественной диспетчеризации в виртуальных методах, вот это была бы бомба!А можно подробнее описать, что это? Выбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 07:27 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZivи часто ты наследуешься от контейнеров и что-то там переопределяешь? как гуи займёшься так почти стабильно нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 07:27 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)MasterZivи часто ты наследуешься от контейнеров и что-то там переопределяешь? как гуи займёшься так почти стабильно нужно расскажи нам об этом (желательно в отдельном топике) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 08:26 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZivВыбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже.Интересная идея. А насколько часто нужен такой функционал? Т.е. когда типы параметров явно отличаются, мы делаем перегрузку функций, то тут всё ок. Остаются случаи, когда типы параметров находятся в иерархии классов. Но тут мы тоже можем явно написать функцию для каждого случая. В любом случае нам придётся писать такую функцию. Поэтому не совсем понятно, какая реализация диспетчеризации планировалась? В случае с this ответственность лежит на классе this, а что будет в случае остальных параметров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 08:43 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSashaMercuryпочему BS не сделал все методы виртуальными по умолчанию? Производительность. Вызов виртуального метода это как минимум два лишних обращения к случайному участку памяти. Кэши процессора не резиновые, а тогда их вообще не было. Это единственная причина, или есть что-то ещё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 22:29 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbMasterZivВыбор реализации метода по типу не только первого аргумента метода (this), но и всех остальных тоже.Интересная идея. А насколько часто нужен такой функционал? Т.е. когда типы параметров явно отличаются, мы делаем перегрузку функций, то тут всё ок. что значит "часто нужен"? это фундаментальное свойство объектной системы языка программирования. Если оно есть или его нет - это две большие разницы. Остаются случаи, когда типы параметров находятся в иерархии классов. ? Но тут мы тоже можем явно написать функцию для каждого случая. ты не сможешь написать тут функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2017, 09:06 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZivты не сможешь написать тут функцию.тогда я, наверно, не совсем понял суть требуемой доработки. Можно какой-нибудь пример для демонстрации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2017, 11:20 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbMasterZivты не сможешь написать тут функцию.тогда я, наверно, не совсем понял суть требуемой доработки. Можно какой-нибудь пример для демонстрации? как ни странно, в Википедии есть довольно вменяемая статья на эту тему: https://en.m.wikipedia.org/wiki/Multiple_dispatch?wprov=sfla1 Там описано даже предложение для C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2017, 07:59 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZiv, как по мне, так слегка сомнительная концепция: один класс принимает решение о выборе метода на основе виртуальной таблицы объекта другого класса. И таки это можно реализовать, вызывая внутри метода класса методы объектов и выполняя нужный функционал там. Будет выглядеть запутанно, да, но реализовать можно. Второй вариант: определение типа параметров перед вызовом метода + перегрузка(там же в вики пример на с++). Ну и всё-таки я не могу придумать, где оно может понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 06:29 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbНу и всё-таки я не могу придумать, где оно может понадобиться. В динамических языках перегрузку можно реализовать только мультидиспетчем. Нафиг это в С++ - это большой вопрос )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 14:23 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbMasterZiv, как по мне, так слегка сомнительная концепция: один класс принимает решение о выборе метода на основе виртуальной таблицы объекта другого класса. Кто тебе сказал, что это делает ОДИН КЛАСС ? CEMbИ таки это можно реализовать, вызывая внутри метода класса методы объектов и выполняя нужный функционал там. Будет выглядеть запутанно, да, но реализовать можно. Второй вариант: определение типа параметров перед вызовом метода + перегрузка(там же в вики пример на с++). Ну и всё-таки я не могу придумать, где оно может понадобиться. Там же дан пример о столкновении двух объектов при моделировании... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 18:06 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
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 на основе класса входящего параметра. Это допускается, но сомнительно. Ну и, всё ещё не могу придумать пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 05:46 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMb, Так и классы можно писать по-другому, на C, и никакой C++ не нужен... А можно классы на ассемблерная писать, никакой C не нужен... А можно еще данные самому в файл писать, никакая СУБД не нужна... А зачем вообще компьютер, он же дорогой такой... Лучше на счетах считать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:19 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMb[ У меня есть 2 замечания к самой идее: 1. Реализация класса X зависит от иерархии классов A. Это неправильно: в случае добавления класса в иерархию, возможно нужно будет править код в X, добавлять ещё один метод m. 2. Класс X принимает решение об обработке в методе m на основе класса входящего параметра. Это допускается, но сомнительно. . еще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ? Сейчас ты пишешь виртуальную функцию, реализуешь ее в каком-то классе, затем она вызывается... у тебя же не возникает ощущение того, что какой-то другой класс принимает решение о вызове твоей реализации виртуальной функции? Нет, не возникает. Почему же оно у тебя возникает в случае MD ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:27 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyCEMbНу и всё-таки я не могу придумать, где оно может понадобиться. В динамических языках перегрузку можно реализовать только мультидиспетчем. Нафиг это в С++ - это большой вопрос )) вот это - дельное замечание... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:29 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZivА зачем вообще компьютер, он же дорогой такой... Лучше на счетах считать!Всё упирается в востребованность. Компьютеры востребованы, счёты - нет. И есть куча примеров, где компьютеры справляются лучше, чем счёты. Но всё ещё нету примеров, где MD справляется лучше, чем то, что есть сейчас. Где примеры? MasterZivеще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ?да, верно, это реализация С++. Но по первому замечанию я не согласен, т.е. это не в плане реализации MD, а в плане архитектуры приложения: в случае изменения иерархии классов А, нам (вероятно) надо менять код класса X. Когда мы работаем с объектами иерархии А через интерфейс, нам менять X не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 06:27 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZiv еще раз, с чего ты взял, что то, какой метод будет вызван - это реализация класса X, а не языка C++ ? Немного почитал статью про open multimethods. Основная идея в том, что мультиметодом можно сделать только свободную функцию, не функцию класса. При этом все параметры, по которым будет идти диспетчеризация, помечаются ключевым словом virtual. Поэтому все твои опасения напасны, это не будет реализацией какого-то класса. Также там есть в самом начале примеры того, где OMM могла бы быть полезной, приводится пример системы кодирования изображения с подсистемой перекодирования изображения из одного формата в другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 08:02 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZivНемного почитал статью про open multimethods.там, оказывается, всё сложнее, чем я себе представлял.MasterZivПоэтому все твои опасения напасны, это не будет реализацией какого-то класса.да я не опасался, я просто думал, что если делать через метод, то архитектура будет не шибко иделальнойMasterZivТакже там есть в самом начале примеры того, где OMM могла бы быть полезной, приводится пример системы кодирования изображения с подсистемой перекодирования изображения из одного формата в другой.о, так под это подходят любые конверторы из чего-то во что-то. А так же какие-нибудь агрегаторы. Ну всё, можно делать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 09:04 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMb, ... а также любой оператор присваивания... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 12:17 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
MasterZiv, а так же любой бинарный оператор... ёпрст... как мы сейчас выживаем вообще без MD!?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 12:46 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbMasterZiv, а так же любой бинарный оператор... ёпрст... как мы сейчас выживаем вообще без MD!?! вот. а между тем, это всего лишь рассказ про ту козу, для избавления от которой ее надо сначала завести. Завели себе козу статической типизации с выдумыванием обрядов моления на нее, а теперь вопрос - как избавиться от той козы не методом ее продажи или съедения, а путем делания вида, что ее нет. Достаточно ли не замечать козу, чтобы несовместимая с ней множественная диспетчеризация сама по себе появилась, и тоже ту козу не заметила? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 13:43 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
teo609" для рождения С++ из C with Сlasses" 20 лет назад я учился именно такому С++. Большинство фишек из 11,14, 17 версий уводят все дальше от этого базового уровня. Становясь более мощным, язык позволяет все более сложные концепции и приемы, это повышает требования к программистам, уменьшает их число, повышает порог вхождения, но от возможности выстрелить в ногу так и не избавляет полностью. Мне кажется, что современный С++ можно рассматривать как ветку от базового, направленную в сторону расширения возможностей языка. И что есть потребность в языке, который был бы другой веткой от базового С++, в котором меньше было бы всяких возможностей в духе Алексндреску, но который был бы надежнее, но без реализации через виртуальную машину (как Java), с сохранением и производительности и возможностью работы с иерархиями классов. Просто ООП себя исчерпало. В нём ковырялись 30 лет как в грязном пальце на ноге. А всего-лишь родили сложное процедурное программирование с неявным this аргументом и over 100500 правил с каким-то нагромождением рулов типа там правила поведения protected и прочего говна типа конструкторы и деструкторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 23:57 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
teo609С++. Большинство фишек из 11,14, 17 версий уводят все дальше от этого базового уровня. Становясь более мощным, язык позволяет все более сложные концепции и приемы, это повышает требования к программистам, уменьшает их число, повышает порог вхождения При ближайшем рассмотрении, сложность концепций в большинстве случаев вызывается нежеланием старперов изучать что-либо новое ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 01:51 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
boobyЗавели себе козу статической типизации с выдумыванием обрядов моления на неенет ничего плохого в статической типизации :) Почему все обязательно становятся адептами или той или иной типизации? С++ хорош тем, что можно выбрать и настроить в нужном месте кода нужную типизацию. Или ненужную. И всё равно это будет работать!maytonПросто ООП себя исчерпало.а какие есть альтернативы? Концептуальные? Причём, чтобы можно было решать те же задачи, что решались с помощью ООП. Чем заменить ООП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 05:10 |
|
||
|
К виртуальным функциям
|
|||
|---|---|---|---|
|
#18+
CEMbа какие есть альтернативы? Концептуальные? Причём, чтобы можно было решать те же задачи, что решались с помощью ООП. Чем заменить ООП? Вы уже говорите с позиции замены всего-того что написано. А зачем заменять? Просто не надо так делать. Реляционная алгебра (SQL/DDL) на 99.99% не использует ООП. И хотя базовые возможности ООП заложены в какой-то там Ansi-200* SQL, его всё равно не используют ибо для бизнес-логики в слое DBMS на это по большему насрать. А в С++ большинство ООП-решений - это сплошное овер-проектирование. ООП - фетиш. И персональный мозговой онанизм самого автора кода. Просто ему (автору) нравится использовать ООП-паттернализм так-же как и Гоголевскому Петрушке нравилось когда "буквы складываются в слова". Выкосите большую половину ООП из вашего кода и ничего у вас не изменится. Всё так-же будет работать. Бизнесу по большему счету все равно что у вас под капотом. ООП или кортежи, структуры, записи, сеты, data-rows. Поэтому на вопрос "как сделать" у меня другой ответ - не делайте так. Никогда не делайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 08:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39415767&tid=2018245]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 194ms |

| 0 / 0 |
