Какие виды перегрузок операторов поддерживают Delphi?
Интересно, какие перегрузки оператора возможны (и с какой версией Delphi)?
Благодаря Hallvard замечательно пишет о перегрузке оператора, я знаю:
- Добавить (Left, Right: Type): Тип (для оператора "+" )
- Вычесть (Left, Right: Type): Тип (для оператора '-')
- Multiply (Left, Right: Type): Type (для оператора '*')
- Разделить (Влево, Вправо: Тип): Тип (для оператора '/')
- Неявный (aValue: Тип): AnotherType и
- Неявный (aValue: AnotherType): Тип (для неявных назначений: a: = b)
- Явный (aValue: Тип): AnotherType и
- Явный (aValue: AnotherType): Тип (для явных присваиваний "cast": a: = Тип (b)
Однако, что я не знаю, это имена операторов '=', '< =', '<', '< > ', ' > ' и ' > ='. Есть ли они, и из какой версии Delphi я могу их использовать?
PS: Я все еще использую Delphi 2009 на данный момент, поэтому у меня будет еще один сильный аргумент обновления, если 2010 предлагает их: -)
Ответы
Ответ 1
Собственно, я сам нашел ответ на этот вопрос, но задал вопрос, как я могу себе представить, что люди будут регулярно искать эту информацию в stackoverflow;
Официальное описание перегружателей операторов можно найти здесь: http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_ (Delphi)
В основном, те, которые я искал, называются:
- Equal, для сравнения '=': Equal (a: type; b: type): Boolean;
- NotEqual, для сравнения '< > ': NotEqual (a: type; b: type): Boolean;
- GreaterThan, для сравнения ' > ': GreaterThan (a: type; b: type) Boolean;
- GreaterThanOrEqual, для сравнения ' > =': GreaterThanOrEqual (a: type; b: type): resultType;
- LessThan, для '<' сравнение: LessThan (a: type; b: type): resultType;
- LessThanOrEqual, для сравнения '< =': LessThanOrEqual (a: type; b: type): resultType;
Ответ 2
Я просто помещаю заметки в Интернете сеанса об нулевых типах с перегрузкой оператора, которые я дал в течение нескольких конференций.
Теперь он содержит таблицу операторов, имена и то, что работает/не работает.
Первоначально WordPress исказил эту таблицу, но мне удалось ее восстановить.
Вы также можете загрузить полный набор слайдов и демонстраций исходного кода.
Короче:
- Документация (даже DocWiki) не завершена, и обратите внимание на достоверность
- Вы не можете перегрузить побитовый оператор, так как BitwiseNot не поддерживается компилятором. Вы должны перегрузить логический не оператор вместо.
- Операторы перегрузки попарно, где это применимо
- Знать существующие операторы
- Будьте очень осторожны при реализации неявных операторов
Надеюсь, это поможет вам. Дайте мне знать, если вам нужна дополнительная информация: я сделал немало производственных работ с перегрузкой оператора.
- Йерун