Какие виды перегрузок операторов поддерживают 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 не поддерживается компилятором. Вы должны перегрузить логический не оператор вместо.
  • Операторы перегрузки попарно, где это применимо
  • Знать существующие операторы
  • Будьте очень осторожны при реализации неявных операторов

Надеюсь, это поможет вам. Дайте мне знать, если вам нужна дополнительная информация: я сделал немало производственных работ с перегрузкой оператора.

- Йерун