Why is operator overloading like this in D?
Daniel Keep
daniel.keep+lists at gmail.com
Mon Dec 11 20:42:51 PST 2006
CloudiDust wrote:
> Thank you very much Daniel!
>
> I wonder how to quote when posting?
I use a real news client, so I hit the "Reply" button :3
> You wrote: (I quoted it manually :)
>
>
>>If you really *do* need to copy the data a structure is pointing to, my
>>suggestion would be to implement "dup" member functions. It's a little
>>inconvenient, but it means that you can always count on "=" just doing a
>>bit copy, and not something more.
>
>
> It seems that dup is not a member of Object according to the library reference,
> why? Is it because not everything can be duplicated?
Because it's not part of the library. "dup" is a property of arrays,
and sort of got extended to other things.
You could name the method "copy" or "duplicate" or "frobnicate"--it's
just a name, afterall. As long as you use it consistantly, it shouldn't
be a problem.
> On the other hand, as there are many classes with which less or greater than
> comparisons (even equality tests) makes no sense, why opCmp becomes a "default"?
> Resulting in a requirement to make arguments of opCmp be of type Object when
> overloading?
>
> ( Maybe I'm just feeling unused to test the type of objects inside the functions. :)
>
> If not overloaded, opEquals does a bit comparison on everything, doesn't it?
>
> And from the reference, I get: "If a struct has no opCmp() function declared for
> it, attempting to compare two structs is an error."
>
> And what does the default opCmp do with classes?
I'll leave that to Frits, who has already answered it :)
> ~CloudiDust
More information about the Digitalmars-d-learn
mailing list