digitalmars.D.learn - opEquals for same type
- "deed" <none none.none> Dec 04 2012
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> Dec 04 2012
- "deed" <none none.void> Dec 05 2012
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?
Dec 04 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
Dec 04 2012
What I know about this topic is in the following chapter: http://ddili.org/ders/d.en/object.html Ali
Thanks, Ali. That clarifies why it worked with opCmp and not with opEquals.
Dec 05 2012









=?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> 