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><



Reply via email to