digitalmars.D.learn - Compound assignment operators
- Yao G. (4/18) Aug 25 2010 --
- Yao G. (9/30) Aug 25 2010 Sorry, I sent the message prematurely :( Anyway, here's complete:
- bearophile (4/7) Aug 25 2010 Try opOpAssign.
- Jonathan M Davis (6/10) Aug 25 2010 Look at http://www.digitalmars.com/d/2.0/operatoroverloading.html (or ev...
- Yao G. (7/14) Aug 25 2010 Ha ha ha! What a shame, I was reading that page looking for a solution, ...
- Jonathan M Davis (5/21) Aug 26 2010 Yeah, well. It's a sparse page, and that section is quite small, so it's...
Is there a way to make compound assignment operators (-=, +=, *= and friends) work with D's operator overload regime? I can't make them work.struct Foo { this( int foo ) Foo opBinary(string op)( in typeof(this) rhv ) if( op == "-=" ) { _bar -= rhv._bar; return this; } private int _bar; } void main() { au-- Yao G.
Aug 25 2010
Sorry, I sent the message prematurely :( Anyway, here's complete: Is there a way to make compound assignment operators (-=, +=, *= and friends) work with D's operator overload regime? I can't make them work.struct Foo { this( int bar ) { bar = bar; } Foo opBinary(string op)( in typeof(this) rhv ) if( op == "+=" ) { _bar += rhv._bar; return this; } private int _bar; } void main() { auto f1 = Foo(1); auto f2 = Foo(2); f2 += f1;I get the following compiler error:Error: 'f1' is not a scalar, it is a Foo Error: 'f1' is not of arithmetic type, it is a Foo Error: 'f2' is not of arithmetic type, it is a FooIs there a way to make this work? Even changing the operator string in opBinary to "-" doesn't do nothing. Or those kind of operators can't be overloaded? -- Yao G.
Aug 25 2010
Yao G.:Is there a way to make this work? Even changing the operator string in opBinary to "-" doesn't do nothing. Or those kind of operators can't be overloaded?Try opOpAssign. Bye, bearophile
Aug 25 2010
On Wednesday 25 August 2010 22:31:38 Yao G. wrote:Sorry, I sent the message prematurely :( Anyway, here's complete: Is there a way to make compound assignment operators (-=, +=, *= and friends) work with D's operator overload regime? I can't make them work.Look at http://www.digitalmars.com/d/2.0/operatoroverloading.html (or even better, TDPL). The correct function would be opOpAssign. I believe that the syntax for += would be opOpAssign!("+")(args) { } - Jonathan M Davis
Aug 25 2010
On Thu, 26 Aug 2010 01:46:02 -0500, Jonathan M Davis <jmdavisprog gmail.com> wrote:Look at http://www.digitalmars.com/d/2.0/operatoroverloading.html (or even better, TDPL). The correct function would be opOpAssign. I believe that the syntax for += would be opOpAssign!("+")(args) { } - Jonathan M DavisHa ha ha! What a shame, I was reading that page looking for a solution, but it seems that I just skipped that part. Thanks and sorry for the stupid question. -- Yao G.
Aug 25 2010
On Wednesday 25 August 2010 23:49:27 Yao G. wrote:On Thu, 26 Aug 2010 01:46:02 -0500, Jonathan M Davis <jmdavisprog gmail.com> wrote:Yeah, well. It's a sparse page, and that section is quite small, so it's pretty easy to miss. Really, at this point, TDPL is the place to go to look stuff up unless it's Phobos-specific stuff. - Jonathan M DavisLook at http://www.digitalmars.com/d/2.0/operatoroverloading.html (or even better, TDPL). The correct function would be opOpAssign. I believe that the syntax for += would be opOpAssign!("+")(args) { } - Jonathan M DavisHa ha ha! What a shame, I was reading that page looking for a solution, but it seems that I just skipped that part. Thanks and sorry for the stupid question.
Aug 26 2010