Overloading equality operator for classes

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 29 10:42:49 PST 2015


On 01/29/2015 09:48 AM, rumbu wrote:
> bool opEquals(Object obj, int value)
> {
>      //do something to compare them
>      return false;
> }
>
>
> void main(string[] args)
> {
>      Object obj;
>      if (obj == 12) {}
>      //ERROR function object.Object.opEquals (Object o) is not callable
> using argument types (int)
> }
>
> According to paragraph (2) -
> http://dlang.org/operatoroverloading.html#eqcmp), the compiler must try
> obj.opEquals(12) and 12.opEquals(obj) but this is not happening.
>
> Is there any other way to overload the equality operator? (except
> overriding opEquals in each class intended to be compared with an integer)

In D, operator overloading is only for user-defined types and through 
their member functions.

class C
{
     int value;

     bool opEquals(int value)
     {
         return value == this.value;
     }
}

void main(string[] args)
{
     auto c = new C;
     if (c == 12) {}
}

Ali



More information about the Digitalmars-d-learn mailing list