digitalmars.D.learn - Operator overloading
- silverling <este_aqui_ hot_mail.com.remove.underscores> May 10 2007
- "Jarrett Billingsley" <kb3ctd2 yahoo.com> May 10 2007
- BCS <BCS pathlink.com> May 10 2007
- Chris Nicholson-Sauls <ibisbasenji gmail.com> May 10 2007
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?
May 10 2007
"silverling" <este_aqui_ hot_mail.com.remove.underscores> wrote in message news:f1vqkm$11li$1 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 } }
May 10 2007
Jarrett Billingsley wrote:"silverling" <este_aqui_ hot_mail.com.remove.underscores> wrote in message news:f1vqkm$11li$1 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.
May 10 2007
BCS wrote:Jarrett Billingsley wrote:"silverling" <este_aqui_ hot_mail.com.remove.underscores> wrote in message news:f1vqkm$11li$1 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
May 10 2007








Chris Nicholson-Sauls <ibisbasenji gmail.com>