PatrickvL
PatrickvL

Reputation: 4164

What kinds of operator overloads does Delphi support?

I wonder what sort of operator overloads are possible (and with what version of Delphi)? Thanks to Hallvard's great write-up on operator overloading, I know of :

However, what I don't know are the names for the '=', '<=', '<', '<>', '>' and '>=' operators. Do these exist, and from what Delphi version can I use these?

PS: I still use Delphi 2009 at the moment, so I would have another strong upgrade-argument if 2010 offers these ;-)

Upvotes: 16

Views: 4548

Answers (2)

PatrickvL
PatrickvL

Reputation: 4164

Actually, I found the answer to this myself, but kept the question as I can imagine people will search for this information regularly on stackoverflow;

The official description on operator overloaders can be found here : http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_(Delphi)

Mainly, the ones I was looking for are named:

  • Equal, for '=' comparison : Equal(a: type; b: type) : Boolean;
  • NotEqual, for '<>' comparison : NotEqual(a: type; b: type): Boolean;
  • GreaterThan, for '>' comparison : GreaterThan(a: type; b: type) Boolean;
  • GreaterThanOrEqual, for '>=' comparison : GreaterThanOrEqual(a: type; b: type): resultType;
  • LessThan, for '<' comparison : LessThan(a: type; b: type): resultType;
  • LessThanOrEqual, for '<=' comparison : LessThanOrEqual(a: type; b: type): resultType;

Upvotes: 17

Jeroen Wiert Pluimers
Jeroen Wiert Pluimers

Reputation: 24493

I just put my notes online of a session on nullable types with operator overloading that I gave during a few conferences.

It now contains a table of the operators, the names and what works/doesn't work. WordPress initially malformed that table, but I managed to restore it.

You can also download the full set of slides and source code demos.

In short:

  • The documentation (even the DocWiki) is not complete, and note reliable
  • You cannot overload the bitwise not operator, as BitwiseNot is not supported by the compiler. You have to overload the logical not operator in stead.
  • Overload operators pairwise where applicable
  • Be aware of existing operators
  • Be very careful when implementing implicit operators

Hope this helps you. Let me know if you need more info: I have done quite a bit of production work with operator overloading.

--jeroen

Upvotes: 10

Related Questions