digitalmars.D.learn - convert ... to array
- Qian Xu (17/17) Oct 20 2009 Hi All,
- Zarathustra (16/16) Oct 20 2009 import std.stdio;
- Chris Nicholson-Sauls (12/39) Oct 20 2009 If you only intend Foo.array() to accept params of a particular type, ju...
- Qian Xu (4/50) Oct 20 2009 I have forgotten to say, that the class Foo comes from an external d-lib...
- Steven Schveighoffer (9/62) Oct 20 2009 typically, tango calls a non-variadic version of a variadic function wit...
Hi All,
a function is declared as follows:
class Foo
{
final Value array(...)
{
...
}
}
I can pass any number of parameters to this method array() like:
auto foo = new Foo;
foo.array(1, 2, 3);
But if I have only an array in hand, how to pass it to this method? Is it
possible?
int[] myarray = [1, 2, 3];
// how to pass "myarray" to foo.array(...)
Best regards
Oct 20 2009
import std.stdio;
class Foo{
final int array(...){
for(uint i = 0; i < _arguments.length; i++){
if(_arguments[i] == typeid(int [])){
int [] l_arr = *cast(int []*)_argptr;
writefln("%d", l_arr[0]);
}
}
return 0x0;
}
}
//
Foo foo = new Foo;
int [] myarray = [1, 2, 3];
foo.array(myarray);
Oct 20 2009
Qian Xu wrote:
Hi All,
a function is declared as follows:
class Foo
{
final Value array(...)
{
...
}
}
I can pass any number of parameters to this method array() like:
auto foo = new Foo;
foo.array(1, 2, 3);
But if I have only an array in hand, how to pass it to this method? Is it
possible?
int[] myarray = [1, 2, 3];
// how to pass "myarray" to foo.array(...)
Best regards
If you only intend Foo.array() to accept params of a particular type, just an
arbitrary
number of them, there's a syntax that marries variadic arguments and arrays
together:
class Foo {
final Value array (int[] args ...) {
...
}
}
This will allow any number of int's to be passed, which are quietly packaged as
an int[],
and also transparently accepts int[] as-is. Obviously, though, it isn't any
help if you
need to accept various types, and I'm not sure how well std.variant plays with
this.
-- Chris Nicholson-Sauls
Oct 20 2009
Chris Nicholson-Sauls wrote:Qian Xu wrote:I have forgotten to say, that the class Foo comes from an external d-library (tango), which means that I am not able to change the function interface. I can only use the method foo.array(...)Hi All, a function is declared as follows: class Foo { final Value array(...) { ... } } I can pass any number of parameters to this method array() like: auto foo = new Foo; foo.array(1, 2, 3); But if I have only an array in hand, how to pass it to this method? Is it possible? int[] myarray = [1, 2, 3]; // how to pass "myarray" to foo.array(...) Best regardsIf you only intend Foo.array() to accept params of a particular type, just an arbitrary number of them, there's a syntax that marries variadic arguments and arrays together: class Foo { final Value array (int[] args ...) { ... } } This will allow any number of int's to be passed, which are quietly packaged as an int[], and also transparently accepts int[] as-is. Obviously, though, it isn't any help if you need to accept various types, and I'm not sure how well std.variant plays with this. -- Chris Nicholson-Sauls
Oct 20 2009
On Tue, 20 Oct 2009 08:58:17 -0400, Qian Xu <qian.xu stud.tu-ilmenau.de> wrote:Chris Nicholson-Sauls wrote:typically, tango calls a non-variadic version of a variadic function with the array and type array. You can see if there is a non-variadic version to call instead. However, it would be a nice feature to be able to signify you want to package the args yourself, rather than having to resort to this kind of stuff. I'm sure a library solution is possible. -SteveQian Xu wrote:I have forgotten to say, that the class Foo comes from an external d-library (tango), which means that I am not able to change the function interface. I can only use the method foo.array(...)Hi All, a function is declared as follows: class Foo { final Value array(...) { ... } } I can pass any number of parameters to this method array() like: auto foo = new Foo; foo.array(1, 2, 3); But if I have only an array in hand, how to pass it to this method? Is it possible? int[] myarray = [1, 2, 3]; // how to pass "myarray" to foo.array(...) Best regardsIf you only intend Foo.array() to accept params of a particular type, just an arbitrary number of them, there's a syntax that marries variadic arguments and arrays together: class Foo { final Value array (int[] args ...) { ... } } This will allow any number of int's to be passed, which are quietly packaged as an int[], and also transparently accepts int[] as-is. Obviously, though, it isn't any help if you need to accept various types, and I'm not sure how well std.variant plays with this. -- Chris Nicholson-Sauls
Oct 20 2009









Zarathustra <adam.chrapkowski gmail.com> 