|
7 / 7 / 3
Регистрация: 17.04.2014
Сообщений: 156
|
||||||
Как перегрузить методы, чтобы получились аналоги get set из C#12.10.2015, 22:15. Показов 6438. Ответов 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 | |
|
Помогаю со студенческими работами здесь
60
получить все комбинации по парам x y, чтобы получились следующие массивы Из каждого предложения удалить знаки препинания чтобы получились лексемы Как перегрузить оператор = , чтобы ф-ция была дружественной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|