Thread overview | ||||||
---|---|---|---|---|---|---|
|
April 05, 2019 Using opOpAssign, cannot assign sequence | ||||
---|---|---|---|---|
| ||||
class X(T) void opOpAssign(string op)(T d) If T has more than length of one then x += ???? We can work around this but it seems to me that we should be able to get it to work in some way x += Alias!(a,b,c) fails to package it up as do all other things I have tried. void Add(Ts d) { opOpAssign!("+")(d); } Then x.Add(a,b,c) works fine. But of course defeats the entire purpose of opOpAssigns short hand notation. |
April 05, 2019 Re: Using opOpAssign, cannot assign sequence | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On Friday, 5 April 2019 at 13:59:27 UTC, Alex wrote:
> class X(T)
> void opOpAssign(string op)(T d)
>
> If T has more than length of one then
>
> x += ????
>
> We can work around this but it seems to me that we should be able to get it to work in some way
>
> x += Alias!(a,b,c)
>
> fails to package it up as do all other things I have tried.
>
> void Add(Ts d) { opOpAssign!("+")(d); }
>
> Then x.Add(a,b,c) works fine.
>
> But of course defeats the entire purpose of opOpAssigns short hand notation.
>
>
>
>
>
I was thinking using tuple would work(of course is longer than Add but would allow for a more general approach, it would require automatic unpacking though and so doesn't work.
|
April 05, 2019 Re: Using opOpAssign, cannot assign sequence | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On 05.04.19 16:00, Alex wrote:
> I was thinking using tuple would work(of course is longer than Add but would allow for a more general approach, it would require automatic unpacking though and so doesn't work.
`tuple` works for me:
----
import std.typecons: tuple;
class X(T ...)
{
void opOpAssign(string op)(T d) {}
}
void main()
{
auto x = new X!(int, float, string);
int a = 42;
float b = 4.2;
string c = "foo";
x += tuple(a, b, c);
}
----
|
April 05, 2019 Re: Using opOpAssign, cannot assign sequence | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On Friday, 5 April 2019 at 13:59:27 UTC, Alex wrote: > class X(T) > void opOpAssign(string op)(T d) > > If T has more than length of one then > > x += ???? > > We can work around this but it seems to me that we should be able to get it to work in some way > > x += Alias!(a,b,c) > > fails to package it up as do all other things I have tried. Works for me if you make opOpAssign a variadic template: void opOpAssign(string op, Args...)(Args args) Full example: https://run.dlang.io/is/dPk3BN |
Copyright © 1999-2021 by the D Language Foundation