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