variadic function: passing args

Chris Nicholson-Sauls ibisbasenji at gmail.com
Wed Jul 5 21:54:34 PDT 2006


icee wrote:
> In article <e8db27$1hu9$2 at digitaldaemon.com>, Walter Bright says...
> 
>>icee wrote:
>>
>>>is there a way to pass the ... args from one variadic function to another
>>>variadic function?
>>>
>>>consider such case:
>>>void vf1(int a, ...) {
>>>
>>>vf2(...);
>>>}
>>>void vf2(...) {
>>>}
>>>
>>>can vf2 take _arguments and _argptr from vf1?
>>
>>No, it works a lot like printf/vprintf. Check out the source to 
>>std.format for how to do it.
> 
> 
> 
> ----------------------
> Yes, it works if we explicitly pass _arguments and _argptr to a overloaded ones,
> but it would be sweet if the compiler can do a magic for me, by some special
> syntax. And even more sometime we have no control on the src which provides the
> vf2.
> 
> we can do this for a type safe variadic function in D(or C#?):
> void vf1(int a, Object[] args...){
> vf2(args);
> }
> 
> and in Python by pack/unpack:
> def vf1(a, *args, **kw):
> vf2(*arg, **kw)
> return
> 
> ----------------------
> 
> 
> In article <e8dc2l$1jta$1 at digitaldaemon.com>, Chris Nicholson-Sauls says...
> 
>>Maybe if we /did/ have a way it would be better.  Maybe something like:
>># vf2(_arguments ... _argptr);
>>
>>Where the '...' in this case has become an operator meaning to pass these varargs to the 
>>callee as such.  Not sure if it'd be the best syntax, but its the simplest thing that 
>>comes to mind.
>>
>>-- Chris Nicholson-Sauls
> 
> 
> ----------------------------
> maybe just vf2(...); is OK??? if this tell the compiler wrap the _arguments
> _argptr pair of vf1 into the vf2 and call it???
> 
> 
> and maybe i'm asking for too much:)
> 
> 

Well sure, but I thought it might be nice if one could, for example, pop the first couple 
of values off before passing it.  Or maybe be able to build one's varargs from scratch or 
other such odd thing.  No I haven't done anything like that in the past... but it could 
only be because I wasn't /able/ to do such a thing.  :)

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list