Thread overview
Using opOpAssign, cannot assign sequence
Apr 05
Alex
Apr 05
Alex
Apr 05
ag0aep6g
April 05
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
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
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
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