Overloading cast
Lars Kyllingstad
public at kyllingen.NOSPAMnet
Tue Nov 11 04:41:33 PST 2008
Hxal wrote:
> Tim M Wrote:
>> http://www.digitalmars.com/d/2.0/operator-overloading.html#Unary
>>
>> "The member function e.opCast() is called, and the return value of
>> opCast() is implicitly converted to type. Since functions cannot be
>> overloaded based on return value, there can be only one opCast per struct
>> or class."
>>
>> I've come across a situation where opcast to different types would be very
>> useful. Why can't this be overloaded to cast to different types as a
>> special situation for overloading on return types. Very useful IMHO.
>
> That's actually very easy to sidestep, just instead of using opCast - use a method
> like T Foo.to!(T) or a library solution like tango.util.Convert.
>
> I do hope though that this restriction will be lifted when opImplicitCast comes
> along, by choosing a signature that takes the target type as parameter.
>
I think the most elegant solution -- and this is not my idea, it has
been mentioned here several times before -- would be to be able to use
templates for operator overloading. Then one could write stuff like
T opCast(T)() { ... }
and extend IFTI to work on casts as well.
-Lars
More information about the Digitalmars-d
mailing list