Unpack Variadic Args?

Paul Backus snarwin at gmail.com
Thu Feb 13 08:06:52 UTC 2020


On Thursday, 13 February 2020 at 07:06:49 UTC, Jeff wrote:
> Hello,
>
> Was wondering if there was a simple, efficient way to unpack a 
> variadic template argument. It needs to be efficient at 
> runtime, and hopefully not use too much excessive CTFE.
>
> C++ has the "..." operator, is there something equivalent in D?
>
>     template<class ...Args>
>     void g(Args... args) {
>         f(foo(args)...); // f(foo(args[0]), foo(args[1])); // 
> etc
>     }
>
> What would be a good way to write that in D, with it being as 
> efficient (no copies or building structs etc) and not use too 
> much CTFE. Needing to use `.map` or similar at CTFE would be an 
> example of too much CTFE.
>
>     void g(Args...)(auto ref Args args) {
>          // ?
>     }

Variadic template arguments unpack automatically in D, so you 
don't need to do anything special here:

     void g(Args...)(auto ref Args args) {
         import core.lifetime: forward; // like std::forward
         f(forward!args);
     }

You can read more about variadic template arguments in this 
article:

https://dlang.org/articles/ctarguments.html


More information about the Digitalmars-d-learn mailing list