constructed variadic call
Alex Parrill via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue May 3 14:32:35 PDT 2016
On Monday, 2 May 2016 at 18:22:52 UTC, Erik Smith wrote:
> Is there way to construct an "argument pack" from a non-static
> array (like the switch below)? I need to transport a variadic
> call through a void*.
>
> switch (a.length) {
> case 1: foo(a[1]); break;
> case 2: foo(a[1], a[2]); break;
> case 3: foo(a[1], a[2], a[3]); break;
> ...
> }
I don't think it's possible to call a vararg function whose
number of arguments is only known at runtime, for the same
reasons it is impossible in C [1].
Your switch statement is probably the best you can do, other than
rewriting the API to not use varargs (which, depending on what
the function is doing, I would recommend). You can possibly use
string mixins or static foreach to avoid repeating the case
clauses.
[1] Populating a va_list:
http://stackoverflow.com/questions/988290/populating-a-va-list
More information about the Digitalmars-d-learn
mailing list