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