September 12, 2006 Re: [Issue 323] New: Error: need opCmp for class Bar | ||||
---|---|---|---|---|
| ||||
========================================================================== The cause is a nasty result of D's function inheritance and overriding. http://www.digitalmars.com/d/function.html # # A functions in a derived class with the same name and parameter types # as a function in a base class overrides that function. # Thus "int T.opCmp(T other)" dosen't override "int Object.opCmp(Object o)" ... Should do the trick: # # int opCmp(Object o){ # T t = cast(T) o; # if(t is null){ # return super.opCmp(o); # }else{ # return opCmp(t); # } # } # # int opCmp(T other) { # int r; # # if (value < other.value) {r = -1;} # else if (value > other.value) {r = 1;} # # return r; # } # ========================================================================== This is realy ugly. For these special method (.dup, .opCmp, .equals), Why can't we have coveriant parameters, or even anchored types as in eiffel? http://www.pi.informatik.tu-darmstadt.de/inf1/eiff-ref/chap12.htm So we can write more clean code: class Dog : Animal { Dog dup() {...} int opCmp(Dog d) {...} int opEquals(Dog d) {...} } Instead of casting Object around? |
Copyright © 1999-2021 by the D Language Foundation