On Saturday, 3 August 2013 at 18:48:17 UTC, monarch_dodra wrote:
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.

Ok, I got an alternative solution. What do you think about the following ?

    void f(T:long) (T arg)
    {
      ...
    }
    void f(T:int) (T arg)
    {
         ...
    }

    void f(T:int) (T arg)
    {
         ...
    }
    void f(T:string) (T arg)
    {
         ...
    }

    void f1(ARGS...)(ARGS args)
    {
       foreach(arg; args)
       {
         f(arg);
       }
    }



Reply via email to