Operator overloading

Chris Nicholson-Sauls ibisbasenji at gmail.com
Thu May 10 21:03:54 PDT 2007


BCS wrote:
> Jarrett Billingsley wrote:
>> "silverling" <este_aqui_ at hot_mail.com.remove.underscores> wrote in 
>> message news:f1vqkm$11li$1 at digitalmars.com...
>>
>>> I have overloaded the multiplication operator like this
>>>
>>> opMul(T)(T number){...}
>>> opMulAssign(T)(Tn number){...}
>>>
>>> Now, I want another multiplier to multiply with a specific class 
>>> (itself) so generally, one would write (after the other overloads)
>>>
>>> opMult(T:classA)(T multiplier)
>>>
>>> as it is specified on the language specs 
>>> http://www.digitalmars.com/d/template.html under the "Specialization" 
>>> section. However, DMD refuses to compile, saying that "specialization 
>>> not allowed for deduced parameter T". I'd really hate to have to 
>>> overload the opMul with real/long/cfloat/classA/etc. How can I fix this?
>>
>>
>> Use static if and is() inside the function:
>>
>> blah opMul(T)(T number)
>> {
>>     static if(is(T : classA))
>>     {
>>         // code for classA version
>>     }
>>     else
>>     {
>>         // for other types
>>     }
>> }
>>
> 
> I really wish there was a static switch
> 
> static switch(T)
> {
>     case classA:
>     {
>     }
> 
>     case int:
>     {
>     }
> 
>     default:
>     {
>     }
> }
> 
> fall thought wouldn't work for it though so it would be kind of odd.

I'd welcome it, regardless.

-- Chris Nicholson-Sauls


More information about the Digitalmars-d-learn mailing list