opEquals for same type
    Ali Çehreli 
    acehreli at yahoo.com
       
    Tue Dec  4 16:24:14 PST 2012
    
    
  
On 12/04/2012 04:12 PM, deed wrote:
> interface I
> {
> // ...
> bool opEquals(I i);
> }
>
> class C : I
> {
> // ...
> bool opEquals(I i)
> {
> return true;
> }
> }
>
> void main()
> {
> I i1 = new C;
> I i2 = new C;
> assert(i1 == i2); // Assertion failure
> assert(i1 != i2); // Passes, although it's the opposite of what I want...
> }
>
> What's missing?
opEquals is a special function of Object but interface's do not inherit 
from Object. Just override it on the class:
interface I
{
     // ...
     // bool opEquals(I i);
}
class C : I
{
     int i;
     // ...
     override bool opEquals(Object o) const
     {
         auto rhs = cast(const C)o;
         return (rhs && (i == rhs.i));
     }
}
void main()
{
     I i1 = new C;
     I i2 = new C;
     assert(i1 == i2);
}
What I know about this topic is in the following chapter:
   http://ddili.org/ders/d.en/object.html
Ali
-- 
D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html
    
    
More information about the Digitalmars-d-learn
mailing list