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

Reply via email to