Are named variadic arguments possible?

Ali Çehreli acehreli at yahoo.com
Tue Jan 12 09:45:43 PST 2010


Alex wrote:
> Sorry, I guess I wasn't clear.  What I want is to be able to do something like the following:
> 
> void foo(...) {
>   variadic [char[]] args = get_named_args(_arguments);
>   foreach (k,v; args) {
>     writefln("%s : %s", k, v);
>   }
> }
> 
> foo( name("john"), age(30), dob("6/24/1980") );
> 
> and have it print
> name : john
> age : 30
> dob: 6/24/1980

Could opDispatch be useful in some way?

The following is nowhere clean. Additionally, VarArg.value must be some 
sort of 'any type' instead of 'string value' for int arguments like 30 
to work. Still... :)

// Worked with dmd 2.039
import std.stdio;

struct VarArg
{
     string key;
     string value;
}

struct VarArgGenerator
{
     VarArg opDispatch(string key, T)(T value)
     {
         return VarArg(key, value);
     }
}

VarArgGenerator arg;

void foo(VarArg[] args...)
{
     foreach (arg; args) {
         writefln("%s : %s", arg.key, arg.value);
     }
}

void main()
{
     foo(arg.name("john"),
         arg.age("30"),
         arg.dob("6/24/1980"));
}

Ali


More information about the Digitalmars-d-learn mailing list