Feedback Thread: DIP 1042--ProtoObject--Community Review Round 1
snarwin at gmail.com
Wed Jan 12 20:49:29 UTC 2022
On Wednesday, 12 January 2022 at 20:26:17 UTC, Dom DiSc wrote:
> On Monday, 10 January 2022 at 14:44:22 UTC, Elronnd wrote:
>> 'cmp' should not return -1 when it can not compare the
>> specified classes. It should not pretend to have a
>> significant result when it does not.
> Yep. 'cmp' should return a float (using 4 values: -1, 0, 1 and
> NaN). This allows to return NaN if some things are not
> comparable. (even better would be if D had a native 2bit type
> with exactly those 4 values)
Alternatively: we don't define a global "Comparable" interface at
all, and the compiler handles opCmp on classes the same way it
does for structs, using the static type of the object to
determine which overload to call.
That way, you can have opCmp return int if your class is totally
ordered, or float if it's partially ordered. And you can also
choose whatever function attributes you like.
If you want to write a function that takes "anything comparable"
as an argument, and you don't want to use templates, you can use
a type erasure library like Atila Neves's tardy  to convert
objects with different opCmp overloads to a common type that uses
dynamic dispatch under the hood. There is no need to have all of
them inherit from a common interface.
More information about the Digitalmars-d