digitalmars.D.learn - opEquals for same type
- deed (22/22) Dec 04 2012 interface I
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (29/50) Dec 04 2012 opEquals is a special function of Object but interface's do not inherit
- deed (2/5) Dec 05 2012 Thanks, Ali. That clarifies why it worked with opCmp and not with
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 AliThanks, Ali. That clarifies why it worked with opCmp and not with opEquals.
Dec 05 2012