Operator overloading
BCS
BCS at pathlink.com
Thu May 10 15:59:25 PDT 2007
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.
More information about the Digitalmars-d-learn
mailing list