Здравствуйте, VladD2, Вы писали: VD>Поля передаются по ссылке. Делаешь универсальный метод в классе и дело в шляпе.
Повторяю вопрос: занафига тогда заводить свойство, если наружу всё равно торчит поле?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Можно напилить библиотеку string transformations, которая построена на перегрузке операторов. Использовать "<<" не выйдет, но оператор & не намного хуже.
В плюсах в либах трансформации обычно используют operator|
Здравствуйте, vdimas, Вы писали: V>В плюсах в либах трансформации обычно используют operator|
А можно посмотреть на пример такой либы? Как там вообще что устроено.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Если вопрос про синтаксис, то примерно как и у тебя — вводится доп. тип сугубо для оператора пайпа (по аналогии с передачей данных через stdio в консольных программах).
Каждый адаптер идёт в двух вариантах:
Syntax
Code
Pipe
rng | boost::adaptors::filtered(pred)
Function
boost::adaptors::filter(rng, pred)
Верхний "модный" вариант раскрывается в нижний классический.
Результатом применения адаптера является объект-ренж — это объект такого типа, для которого определены операции begin(rng) и end(rng), т.е. у которого можно получить пару итераторов.
Здравствуйте, _FRED_, Вы писали: _FR>Почему не выйдет?
Потому что у этого оператора слева должен быть custom type. А нам нужно, чтобы слева была строка.
Ведь compound assignment раскрывается из x op= Smth в x = x op Smth.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Serginio1, Вы писали: S>https://gist.github.com/mgravell/c46a1de553abe325dea0c44ac7fa7766
Это — плохая идея.
Кто угодно со ссылкой на объект может менять такое свойство так, как захочется.
С такой семантикой проще отказаться от свойства и выставить наружу голое поле.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Serginio1, Вы писали: S>>https://gist.github.com/mgravell/c46a1de553abe325dea0c44ac7fa7766 S>Это — плохая идея. S>Кто угодно со ссылкой на объект может менять такое свойство так, как захочется. S>С такой семантикой проще отказаться от свойства и выставить наружу голое поле.
Ну и обычное свойство ты можешь менять через set_PropertyName.
Ну и не голое поле, а ref поле. Большой разницы нет. Просто обычно поля не публичны, а свойства публичны через тот же {get;set}
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Ну и обычное свойство ты можешь менять через set_PropertyName.
Нет, там вызовется мой сеттер, который может проверять и гарантировать инварианты. S>Ну и не голое поле, а ref поле. Большой разницы нет. Просто обычно поля не публичны, а свойства публичны через тот же {get;set}
Свойства публичны не через get/set, а через модификатор public. Как, впрочем, и поля.
Я могу себе представить сценарий, что мы объект готовим для подачи в какой-то библиотечный код, который принципиально не умеет работать с FieldInfo, а требует всенепременно PropertyInfo.
Но даже в таком сценарии шансы на то, что этот внешний код готов к ref-свойству — нулевые.
Так что реф-свойство в данном случае — фикция.
Ну, и, опять же, решение является интрузивным. То есть оно требует изменения дизайна всех классов, задействованных в задаче. Что, в свою очередь повлечёт непредсказуемое количество последствий.
Где-то у свойства был нетривиальный сеттер; где-то класс надо было отдавать в биндинг гуя, не умеющий работать с ref string, где-то ещё что-то отвалится.
Как и замена свойства на поле — слишком много усилий для слишком маленького выигрыша.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
S>Так что реф-свойство в данном случае — фикция. S>Ну, и, опять же, решение является интрузивным. То есть оно требует изменения дизайна всех классов, задействованных в задаче. Что, в свою очередь повлечёт непредсказуемое количество последствий. S>Где-то у свойства был нетривиальный сеттер; где-то класс надо было отдавать в биндинг гуя, не умеющий работать с ref string, где-то ещё что-то отвалится.
S>Как и замена свойства на поле — слишком много усилий для слишком маленького выигрыша.