How to delegate varargs

Tomas Lindquist Olsen tomas at famolsen.dk
Tue Nov 20 15:21:21 PST 2007


Tomas Lindquist Olsen wrote:
> 
>  From a users point of view the only change to the D spec would be:
> 
> At the end of the section "D-style Variadic Functions" append:
> 
> <<<<<
> The variadic arguments can be forwarded to another D-style variadic 
> function by passing '...' as an argument. The forwarded arguments are 
> bit-copied onto a new argument list.
> 
>     void foo(...)
>     {
>         // do something
>     }
>     void bar(...)
>     {
>         foo(1, ..., 3.0);
>     }
>  >>>>>
> 
> With this approach there is still no way to slice the argument list, for 
> that a more high-level approach like the ones mentioned by Jarret in the 
> "Variadic arguments and map" thread is probably needed.

Possibly also the section about "_argptr" should be changed to:

"These variadic functions have a special local variable declared for them, _argptr, which is a 
void* pointer to the first of the variadic arguments. To access the arguments, _argptr must be 
cast to a pointer to the expected argument type. There is also a special local variable, 
_argptrLength, which holds the length in bytes of the variadic argument list"

This could however just be an implementation detail.



More information about the Digitalmars-d mailing list