Variadic functions: How to pass another variadic function the variadic args?

monarch_dodra monarchdodra at gmail.com
Sat Aug 3 11:48:14 PDT 2013


On Saturday, 3 August 2013 at 16:57:41 UTC, Gabi wrote:
> On Saturday, 3 August 2013 at 14:58:49 UTC, bearophile wrote:
>> Gabi:
>>
>>> //HOW TO pass F1(..) the args we were called with ?
>>
>>
>> import std.stdio;
>>
>> void f1(Args...)(Args args) {
>>    foreach (arg; args)
>>        arg.writeln;
>> }
>>
>> void f2(Args...)(Args args) {
>>    f1(args);
>> }
>>
>> void main() {
>>    f2(10, "hello", 1.5);
>> }
>>
>>
>> Bye,
>> bearophile
>
> Thanks but how do I do this for variadic functions (using 
> _arguments and friends) ? Not variadic templates..
> More specifically I want to know at runtime the type of each 
> parameter

I don't know how to do runtime variadics in D, and quite frankly, 
I don't want to know: They are an abomination, and I don't want 
to be anywhere near these things.

My guess though, is that it's the same syntax as in C? Use a 
straight up elispis:

void foo(...).

Note that you *can't* extract the types from the vararg unless 
you *guess* them from an alternative source (for example, "fmt" 
in the printf function)

Also, importing "core.vararg" should get you whatever you'd get 
in 'vararg.h'/"stdarg.h". From there, I don't think D does 
anything specific that's not actually just C.


More information about the Digitalmars-d-learn mailing list