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