Operator overloading

Jarrett Billingsley kb3ctd2 at yahoo.com
Thu May 10 12:41:15 PDT 2007


"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
    }
} 




More information about the Digitalmars-d-learn mailing list