opEquals footprint
    Erik Rasmussen 
    i_am_erik at yahoo.com
       
    Wed Mar 22 07:52:13 PST 2006
    
    
  
xs0 wrote:
> Erik Rasmussen wrote:
> 
>> xs0 wrote:
>>
>>> int opEquals(Object)
>>>
>>> so it overrides the default implementation found in, you guessed it, 
>>> Object :) Same goes for opCmp, I think..
>>>
>>>
>>> xs0
>>
>>
>> So what's the best way to actually check the type in the 
>> opEquals/opCmp method?  Something like...
>>
>> class A
>> {
>>   int opEquals(Object o)
>>   {
>>     // check for null
>>     if(o is null)
>>       return false;
>>     // check type
>>     if(typeid(typeof(o)) != typeid(A))
>>       return false;
>>     // cast
>>     A that = cast(A) o;
>>     // actually check fields
>>     return this.a == that.a && this.b == that.b && ...;
>>   }
>> }
>>
>> Or is there a better way?  asserts?
>>
>> How do you hard-core D programmers usually do it?
>>
>> Cheers,
>> Erik
> 
> 
> Something like this should be ok:
> 
> // optional
> if (this is o)
>     return true;
> 
> if (A that = cast(A)o) { // checks for null, too
>     return this.a==that.a && ...
> } else {
>     return false;
> }
> 
> OTOH, if you want to return false for subclasses, your version seems 
> fine to me.
> 
> 
> xs0
No, I definitely don't want it to return false for subclasses!
That "failed cast returns null" trick is handy.  That's waaay better 
than all that typeid(typeof()) crap.  Thanks guys.
Erik
    
    
More information about the Digitalmars-d-learn
mailing list