Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
January 25, 2021 How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
I'd like to make this work s += 10 where s is a struct. How can I do that? this isn't working: auto ref opAssign(string op, T)(T value) if(op == "+") { m += value; return this; } the compiler didn't consider that overload and return: d.d(34): Error: s is not a scalar, it is a S full code: auto s = S(10); writeln(--s); s += 5; writeln(s); struct S { int m; int opUnary(string op)() { static if(op == "--") return --m; else static if(op == "++") return ++m; else static assert(0, "unsupported operator"); } void opBinary(string op, R)(const R rhs) if(op == "+") { m += rhs; return this; } auto ref opAssign(string op, T)(T value) if(op == "+") { m += value; return this; } } |
January 25, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | On Monday, 25 January 2021 at 17:09:22 UTC, Jack wrote:
> auto ref opAssign(string op, T)(T value)
try
opOpAssign instead
opAssign is for =
opOpAssign is for +=, -=, etc.
It might be some variation but I think it works if you just rename it.
|
January 25, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | On Monday, 25 January 2021 at 17:09:22 UTC, Jack wrote: > I'd like to make this work s += 10 where s is a struct. How can I do that? +=, -=, *=, and other compound assignment operators can be overloaded by defining `opOpAssign`: https://dlang.org/spec/operatoroverloading.html#op-assign |
January 25, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Monday, 25 January 2021 at 17:11:41 UTC, Adam D. Ruppe wrote:
> On Monday, 25 January 2021 at 17:09:22 UTC, Jack wrote:
>> auto ref opAssign(string op, T)(T value)
>
> try
>
> opOpAssign instead
>
> opAssign is for =
>
> opOpAssign is for +=, -=, etc.
>
> It might be some variation but I think it works if you just rename it.
it did work, thanks. That naming is confusing
|
January 25, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Monday, 25 January 2021 at 17:12:47 UTC, Paul Backus wrote:
> On Monday, 25 January 2021 at 17:09:22 UTC, Jack wrote:
>> I'd like to make this work s += 10 where s is a struct. How can I do that?
>
> +=, -=, *=, and other compound assignment operators can be overloaded by defining `opOpAssign`:
>
> https://dlang.org/spec/operatoroverloading.html#op-assign
thanks
|
January 25, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | On Monday, 25 January 2021 at 21:53:15 UTC, Jack wrote:
> That naming is confusing
op: it is an operator method
Op: it takes an operator as a parameter
Assign: kinda obvious.
As an example, there are opIndex, opIndexAssign and opIndexOpAssign.
opIndex overloads obj[i].
opIndexAssign overloads obj[i] = rhs, and
opIndexOpAssign overloads opj[i] += rhs.
Maybe, in the greater scheme, the naming makes more sense to you.
|
January 26, 2021 Re: How do I overload += operator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | On Monday, 25 January 2021 at 17:09:22 UTC, Jack wrote: > I'd like to make this work s += 10 where s is a struct. How can I do that? You have your answer, but someone else might come upon this in the future, so here's a link to the clearest explanation of operator overloading for someone new to the language: http://ddili.org/ders/d.en/operator_overloading.html |
Copyright © 1999-2021 by the D Language Foundation