|
7 / 7 / 3
Регистрация: 17.04.2014
Сообщений: 156
|
||||||
Как перегрузить методы, чтобы получились аналоги get set из C#12.10.2015, 22:15. Показов 6673. Ответов 75
Метки нет (Все метки)
Как можно перегрузить методы, что бы получился аналог get set из C#. Т.е. что то такое:
0
|
||||||
| 12.10.2015, 22:15 | |
|
Ответы с готовыми решениями:
75
Как сделать, чтобы из числа, допустим, 0,040005000 после 5 получились звёздочки Std::set с кастомным классом, как правильно перегрузить оператор < ? Как перегрузить методы Equals() и GetHashCode(), для сравнения свойств объектов? |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||||||||||||
| 14.10.2015, 20:41 | |||||||||||||||||||||||||||||||||||
|
лишь наличием () в конце метода. и это - не есть критерий удобства в данном случае. удобнее то, что привычно и поддается системе. например, одна из важных причин, по которой рекомендуется использовать сеттеры/геттеры - это префиксы в именах функций. все методы, которые что-то устанавливают, начинаются с Set/set все методы, которые позволяют что-то узнать, начинаются с Get/get современная ИДЕ позволяет сразу показать весь список доступных методов по первым 3м буквам. это очень удобно. жмакаем set и сразу получаем список всего, что можно посетить для данного класса. так то можно было бы и обычные методы обзывать как угодно. как бы никто не запрещает. но обычно зоопарк никто специально не разводит. потому что люди более менее опытные ценят удобства использования. нужно знать адрес объекта для которого делается вызов, и адрес функции-члена, которую нужно возвать.
ничего революционного он не делает. например, все сеттеры начинаются с буковок set зоопарк имен никакой читабельности не улучшает. каким боком вы приплели RTTI вообще не понятно. вы ж не хотите мне сказать, что раньше я писал только сеттеры/геттеры, а теперь мне придется писать и сеттеры/геттеры, и проперти? причем сеттеры/геттеры за каким то фигом заталкивать в протестед? потому что записи вида:
как получить список функций-членов и данных-членов любого произвольного класса. std::function полностью реализован средствами самого языка. по сравнению с его возможностями, ваш костыль __closure - жалкий огрызок. вы как то очень легко противоречите реальности. технология шаблонов позволяет не иметь пенальти в рантайме. неудиветельно, что на её развитие и сделанна ставка. дело здесь не в левостоящем делегате. просто на плюсах нет такого синтаксиса:
0
|
|||||||||||||||||||||||||||||||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 14.10.2015, 21:02 | ||||||
|
И как не наворачивай шаблоны от ран-тайм полиморфизма все равно не уйдешь. Добавлено через 5 минут
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 14.10.2015, 21:06 | ||||||
|
но и аргументы, с которыми его нужно будет позвать. компилятор знает все от и до о классах и функциях, которые сам же и генерит по шаблону. поэтому, шаблоны отлично inline. приведите пример оверхеда. оверхед рантайм-решения добавляют. на то оно и рантайм, что выполняется в рантайме. и не испытывают проблем. а ну да, вы ж вроде бы STL не осилили. ну понятно, откуда ноги растут. он целиком и полностью повторяет поведение указателей на функции-члены. Добавлено через 57 секунд
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 14.10.2015, 21:06 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 14.10.2015, 21:09 | |||
|
потому что из того факта, что язык не поддерживает синтаксис: obj.method никак не следует ущербная функциональность std::function. он умеет все, что может ваш кастрат, плюс ещё многое полезное, чего ваш кастрат не умеет.
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 14.10.2015, 21:15 | ||||
|
Добавлено через 3 минуты Добавлено через 1 минуту
0
|
||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 14.10.2015, 21:21 | ||||
|
Добавлено через 46 секунд
0
|
||||
|
|
||
| 14.10.2015, 21:32 | ||
|
Просто предложенный тобою вариант не универсален, т.к. не соответствует стандарту, а ты преподносишь его как универсальное решение.
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 14.10.2015, 21:45 | |||
|
Добавлено через 7 минут Потому что те же property у всех как бы есть(С++ Builder, MSVC++, Intel C++), но вообще то их не существует
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 14.10.2015, 22:23 | ||
|
Просто как понял идея комитета исходила от Dinkumware потому как по другому у них со сбытом начало не получаться, в следствие того что расширения синтаксиса эффективнее шаблономазни. Такой комитет только тормозит развитие и стандартизацию языка. тот же smartptr реализуется средствами компилятора еще лучше и надежнее. достаточно только добавить для указателей модификатор local. Хотя действительно может просто быть редко пользуемым. Потому что примеры которые объясняют зачем нужен std::smart_ptr - ну вообще рассчитаны на криворуких идиотов пишущих хелловверды а не объектно-ориентированные библиотеки.
0
|
||
|
|
|||
| 14.10.2015, 22:32 | |||
|
Fulcrum_013, почему ты не член комитета? И почему ты до сих пор пользуешься этим языком?
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||
| 14.10.2015, 22:46 | |||||
|
Возникает другой интересный вопрос, почему и майкрософт и борланд изобретают свои шаблонные велосипеды вместо к примеру std::vector если в std::vector все так взвешенно и продуманно?
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 14.10.2015, 23:20 | |||||||
|
просто это скрыто от пользователя. и весь геммор по связке берет на себя компилятор. все остальное - не портируемое, а значит имеет незначительную область применения. ни ваш кастрированный костыль, ни мехнизм пропертей. так что это не более, чем ваши фантазии. неужели так трудно понять? бинд аргументов - более чем востребованная фича. а по поводу оверхеда - вы сначала проверьте, потом вякайте. объясняешь человеку: шаблон inline во все поля. нет, человек тупит. у человека оверхед в сферическом вакууме. https://msdn.microsoft.com/ru-... 55798.aspx
0
|
|||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||||||||||||
| 15.10.2015, 02:06 | |||||||||||||||||
|
Добавлено через 45 секунд Добавлено через 6 минут Потому как механизм такой вкусности есть уже как минимум 20 лет, а в стандарте ее нет. Добавлено через 9 минут Неужели std::function будет быстрее чем
Добавлено через 36 минут К примеру проперти - тоже можно расценивать как запуск расчета по событию обращения к переменной. Без closure событийная модель с объектами реализовывается либо через сообщения с тормознутой деспетчеризацией, либо через кучу костылей, третьего не дано. А без рефлекшина... ну если конечно у тебя набор взаимосвязей определен в компайл-тайме то можно и без рефлекшина. Но в большинстве задач эти взаимосвязи end-user мышкой клоц-клоц. Событие это такое же свойство, которые редактировать очень часто надо в рантайме. Не пилить же под каждую мелочь отдельную форму если на 99% с пилением формы и алгоритм в рантайме справляется по данным рефлекшина? Добавлено через 24 минуты Добавлено через 1 час 12 минут Но 20 лет назад они добавили __closure и сделали абсолютно все на нем. Не догадываешься почему?
0
|
|||||||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||||
| 16.10.2015, 22:15 | ||||||||||||||||||||
|
потому что std::function умееет все тоже, плюс ещё многное. которые можно реализовать за счет возможностей самого языка. и это - правильно. ваш кастрированный делегат не умеет бинд аргументов вовсе не потому, что здесь какая то инженерная засада. технически реализовать бинд элементарно применив вашего же кастрата. однако это никак не согласуется с его дизайном. смотрите:
делегат для них будет слишком не эффективно. и нужен достаточно гибкий синтаксис, позволяющий и простые делегаты, и с захватом переменных среды. в результате имеем полнофункциональный, гибкий, мощный std::function, а не кастрированный делегат, который не умеет ничего, кроме нацеливания. что вы вообще не осознаете область применения. представьте себе задачу: нужно реализовать пул-задач. при создании задачи мы указываем, с какими аргументами задача должна запуститься в некотором будующем. std::function жрет подобное тривиально. ваш кастрат такое не умеет в принципе. как вы будите запоминать аргументы, с которыми нужно когда то в будущем позвать функцию? а это - очень распространенный кейс. но скажу, что не медленее. в простых случаях там прямые вызовы. то есть нет затрат на рантайм-полиморфизм. ещё раз, специально для тупеньких - шаблоны inline. без биндов std::function разворачивается точно так же, как и ваш кастрат, который в принципе не умеет бинды. я вообще то кросс-платформенный. я как бе не вчера замужем. то бишь, вся диспетчеризация разруливается ещё в компалтайме. в рантайме вообще никаких пенальти. она рвет и мечет qt, и прочие известные мне аналоги. для реализации такой системы мне не понадобилось ни тормознутое RTTI, ни указатели на функции-члены, ни делегаты. я что-то сделал не так? просто вы несете херь. вы позиционируете себя как старперра с 20 летним стажем. но несете такую ахинею, что создается устойчивое впечатление, что вы понятия не имеете о возможностях языка. как новобранец. я подозреваю,что вы остановились в развитии 20 лет назад. за программиста и будут сношаццо std::function, функторы, лямбды поэтому, производители предпочитали закладываться на собственные расширения, которые были им подкотрольны, нежели на стандарт, который в те времена был как "смутное время". по этой же причине, qt запили свой мок, например. их любят обвинять в неосиляторстве шаблонов. но правда в том, что когда qt стартовал, шаблоны были ещё слишком не стандартизированны.
0
|
||||||||||||||||||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 16.10.2015, 22:21 | ||
|
А вообще твою бы энергию, да в мирное русло
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||||||
| 16.10.2015, 23:26 | |||||||||||
|
и __closure и __property и reflection без расширений компилятора в полном объеме не реализуются, без конкретных плясок с бубном причем не на уровне "один раз написал", а на уровне "в каждом использующем объекте" А к примеру указание из хидера с какой либой линковать вообще без расширения препроцессора не реализуемо. А подход без STL смутные времена - тупой бред. Потому что любую библиотеку с открытым кодом можно скомпилировать на другом компиляторе, какой бы нестандартной она ни была, если расширения компилятора одинаковые. Поэтому стандартизировать надо расширения компилятора а не никчемную библиотеку. Они и сейчас свои решения закладывают. К примеру майкрософт во всю пользует CGrowableArray а борланд TDynArray вместо std:vector. Никто не сможет обязать их пользовать в своих фрэймверках кривые поделки Dinkumware. Могут только обязать иметь их в комплекте. Добавлено через 9 минут А 20 лет назад переделали на фактически калбэки между объектами. А деспетчиризация используется только для обработки сообщений из очереди сообщений оси. Кстати и ось далеко не все передает через сообщения. Очень много идет через каллбэки. Добавлено через 11 минут TEvent a=b.OnEvent; c использованием std::function, а потом уже рассказывай какая она универсальная и хорошая. Добавлено через 4 минуты Добавлено через 7 минут Добавлено через 2 минуты Добавлено через 2 минуты Добавлено через 19 минут
0
|
|||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 16.10.2015, 23:29 | |||
|
но не стандартная тема. оно эксплуатирует нативные расширения компилятора по полной. причем "не документированные". я смотрел под микроскопом вижал-студийную версию. там используются вещи, о которых я в документациях и не подозревал. и не единого виртуального вызова. единственный виртуальный вызов, что я обнаружил исследуя реализацию: это искючение, если позвать делегат, не нацеленный никуда. Добавлено через 1 минуту если вы его не предоставите - ищите другого собеседника. мне балаболки не интересны.
0
|
|||
| 16.10.2015, 23:29 | |
|
получить все комбинации по парам x y, чтобы получились следующие массивы Из каждого предложения удалить знаки препинания чтобы получились лексемы Как перегрузить оператор = , чтобы ф-ция была дружественной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|