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