|
7 / 7 / 3
Регистрация: 17.04.2014
Сообщений: 156
|
||||||
Как перегрузить методы, чтобы получились аналоги get set из C#12.10.2015, 22:15. Показов 6629. Ответов 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, чтобы получились следующие массивы Из каждого предложения удалить знаки препинания чтобы получились лексемы Как перегрузить оператор = , чтобы ф-ция была дружественной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|