Open apolukhin opened 3 years ago
yndx-antoshkka, 31 августа 2018, 12:35 У контейнеров на этот случай есть метод .at(const Key&)
Нужны очень веские аргументы, чтобы вводить в язык новый оператор. Попробуйте привести пример, где без этого оператора прям никак не обойтись.
Konstantin Stupnik, 2 сентября 2018, 16:26 yndx-antoshkka,
Понятно, что всё можно сделать методами с нужной семантикой. По большому счёту перегрузка операторов вообще не нужна. Вон джава живёт без перегрузки. Лично я столкнулся с необходимостью чёткого разделения чтения и записи когда делал обёртку для Vertext Buffer Array для OpenGL. Мне нужно было знать какие элементы были модифицированны, что бы заливать в видео память только изменённую часть.
С и использованием метода вместо оператора[] вычисления сложнее воспринимать.
Ну и по мне так это достаточно принципиальный косяк в дизайне - один оператор и на чтение и на запись. И отсутствие перегрузить отдельно именно запись является неприятным ограничением.
Игорь, 5 сентября 2018, 21:15 Konstantin Stupnik, даже если вводить этот оператор, как себя должен тогда вести объект, в котором перегружен ваш оператор и оператор= и мы вызываем []= , что тогда? Получается один из операторов будет заглушен, что уже криво и без костылей не обойтись. Никто не мешает вам сделать метод аля .get_and_set(1, "1");
Fihtangolz, 9 сентября 2018, 18:49 Konstantin Stupnik, напиши wrap для V, с operator =, и все будет работать ровно также как и с []=
Перенос предложения: голоса +1, -5 Автор идеи: Konstantin Stupnik
Выделенный оператор для присвоения элемента контейнеру по индексу/ключу.
В данный момент невозможно (простым образом и без серьёзного overhead) разделить:
и
Было бы во многих случаях очень полезно иметь выделенный оператор а-ля:
Который бы вызывался только в случае:
Можно было бы создавать контейнеры защищенные от создания элемента на чтении.