Hello BCS,
Hello bearophile,
I have seen this bug report:
http://d.puremagic.com/issues/show_bug.cgi?id=4224
Do you know any way to make the following code work? It can be
useful,
especially once the int type can be replaced with a good variant
type:
struct A {
int[string] table;
int opDispatch(string s)() {
return table[s];
}
void opDispatch(string s)(int x) {
table[s] = x;
}
}
void main() {
A a;
a.i = 10;
assert(a.i == 10);
}
IIRC I got more or less what you want somewhere in here:
http://dsource.org/projects/scrapple/browser/trunk/units/si2.d
I'll see if I can chop it down a bit.
I guess I didn't rememeber correctly. Anyway, this work:
import std.stdio;
template If(bool b, T, F) { static if(b) alias T If; else alias F If; }
struct S
{
int[string] vals;
template opDispatch(string s)
{
If!(T.length == 1, void, int) opDispatch(T...)(T t)
{
static if(T.length == 1) vals[s] = t[0];
else return vals[s];
}
}
}
void main()
{
S s;
s.foo = 5;
writef("%s\n", s.foo());
}
--
... <IXOYE><