Christoph Mueller is asking the exact problem that I've been having. :)

Steven Schveighoffer wrote:

> If you are using D2, there is a workaround:
>
> interface I
> {
>    final bool opEquals(I other)
>    {
>       Object me = cast(Object)this;
>       Object they = cast(Object)other;
>       return equals(me, they);

Is 'equals' a function on this interface?

>    }
> }

I could not make that work. The compiler is still trying to call Object.opEquals.

At the risk of turning this forum to D.learn, I tried to have an explicit 'equals' member function on the interface and use that.

This is what I have:

import object;

interface I
{
    final bool opEquals(I other)
    {
        return equals(cast(Object)other);
    }

    bool equals(Object o);
}

class C : I
{
    override bool opEquals(Object o) const
    {
        return true;
    }

    bool equals(Object o)
    {
        return this == o;
    }
}

void main()
{
    I i = new C;
    i == i;         // <-- Error line
}

But it still calls Object.opEquals:

Error: function object.opEquals (Object lhs, Object rhs) is not callable using argument types (I,I) Error: cannot implicitly convert expression (i) of type deneme.I to object.Object Error: cannot implicitly convert expression (i) of type deneme.I to object.Object

Ali

Reply via email to