On Tue, 20 Oct 2009 08:58:17 -0400, Qian Xu <[email protected]> wrote:

Chris Nicholson-Sauls wrote:

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

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(...)

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.

-Steve

Reply via email to