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