www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Using opOpAssign, cannot assign sequence

reply Alex <AJ gmail.com> writes:
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.




		
Apr 05 2019
next sibling parent reply Alex <AJ gmail.com> writes:
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.
Apr 05 2019
parent ag0aep6g <anonymous example.com> writes:
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); } ----
Apr 05 2019
prev sibling parent Paul Backus <snarwin gmail.com> writes:
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
Apr 05 2019