digitalmars.D.learn - [Doubt] Variadic arguments as reference (Possible?)
- MattCoder (23/23) Jun 14 2013 Hi,
- Regan Heath (18/20) Jun 14 2013 import std.stdio;
- MattCoder (8/23) Jun 14 2013 Hi Regan,
- bearophile (15/20) Jun 14 2013 One way to do it, but beware of template bloat:
- MattCodrr (6/19) Jun 14 2013 Hi bearophile,
Hi,
I want to know if there is a way to pass variadic arguments as
reference? DMD says no!
I wrote the snippet code below, but what I want to do in fact is
assign the sum back to respective variables to use somewhere else.
http://dpaste.dzfl.pl/515edfb8
or
import std.stdio;
import std.conv;
void sum(double value, in double[] numbers ...){
foreach(num; numbers)
writeln(num+value);
}
void main(){
auto a = 1, b = 2, c = 3;
sum(10, a, b, c);
writeln("a = "~to!string(a),
"\nb = "~to!string(b),
"\nc = "~to!string(c));
}
Thanks,
Matheus.
Jun 14 2013
On Fri, 14 Jun 2013 13:55:29 +0100, MattCoder <mattcoder gmail.com> wrote:I want to know if there is a way to pass variadic arguments as reference? DMD says no!import std.stdio; import std.conv; void sum(double value, double*[] numbers ...){ foreach(ref num; numbers) *num = *num + value; } void main(){ double a = 1, b = 2, c = 3; sum(10, &a, &b, &c); writeln("a = "~to!string(a), "\nb = "~to!string(b), "\nc = "~to!string(c)); } R -- Using Opera's revolutionary email client: http://www.opera.com/mail/
Jun 14 2013
On Friday, 14 June 2013 at 13:20:26 UTC, Regan Heath wrote:
import std.stdio;
import std.conv;
void sum(double value, double*[] numbers ...){
foreach(ref num; numbers)
*num = *num + value;
}
void main(){
double a = 1, b = 2, c = 3;
sum(10, &a, &b, &c);
writeln("a = "~to!string(a),
"\nb = "~to!string(b),
"\nc = "~to!string(c));
}
R
Hi Regan,
My fault, I thought that those variadics only works with "in"
after I assume wrong from
(http://ddili.org/ders/d.en/parameter_flexibility.html), but your
code works well.
Thanks,
Matheus.
Jun 14 2013
MattCoder:I want to know if there is a way to pass variadic arguments as reference? DMD says no! I wrote the snippet code below, but what I want to do in fact is assign the sum back to respective variables to use somewhere else.One way to do it, but beware of template bloat: import std.stdio; void sum(TArgs...)(double value, ref TArgs numbers) { foreach (ref num; numbers) // Note: this is a static foreach. num += value; } void main() { auto a = 1, b = 2, c = 3; writeln(a, " ", b, " ", c); sum(10, a, b, c); writeln(a, " ", b, " ", c); } Bye, bearophile
Jun 14 2013
On Friday, 14 June 2013 at 13:24:18 UTC, bearophile wrote:
One way to do it, but beware of template bloat:
import std.stdio;
void sum(TArgs...)(double value, ref TArgs numbers) {
foreach (ref num; numbers) // Note: this is a static
foreach.
num += value;
}
void main() {
auto a = 1, b = 2, c = 3;
writeln(a, " ", b, " ", c);
sum(10, a, b, c);
writeln(a, " ", b, " ", c);
}
Hi bearophile,
I know that I don't specified on my first post, but since I need
a generic type parameter on my real problem, your ref TArgs seems
to fit nicely.
Thanks.
Jun 14 2013









"MattCoder" <mattcoder gmail.com> 