To use opDispatch
Simen kjaeraas
simen.kjaras at gmail.com
Sun May 23 13:14:30 PDT 2010
bearophile <bearophileHUGS at lycos.com> wrote:
> But have you tried to run it? That is similar to one of my first
> versions, and it doesn't work, I don't know why.
You're right. Property syntax is what causes it. It only
instantiates the template with the parameter for the name.[1]
This code seems to work correctly:
struct bar {
int[string] table;
template opDispatch( string name ) {
@property
auto opDispatch( T... )( T args ) {
static if (T.length == 0) {
return table[name];
} else static if (T.length == 1) {
table[name] = args[0];
} else {
pragma( msg, to!string( T.length ) );
static assert(false, "Wrong parameter count to opDispatch");
}
}
}
}
void main( ) {
bar b;
b.foz = 34;
writeln( b.foz( ) );
}
Note however, that property syntax does not work for the degenerate case
of 0 arguments, i.e. the getter. One has to call it without the benefit
of property syntax.
[1]: http://d.puremagic.com/issues/show_bug.cgi?id=620
--
Simen
More information about the Digitalmars-d
mailing list