What kinds of operator overloads does Delphi support?

后端 未结 2 464
春和景丽
春和景丽 2020-12-31 04:48

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 :

相关标签:
2条回答
  • 2020-12-31 05:27

    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;
    0 讨论(0)
  • 2020-12-31 05:52

    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

    0 讨论(0)
提交回复
热议问题