Template class with dispatched properties
Ross Hays
throwaway at email.net
Thu Nov 7 20:28:30 PST 2013
> Strange. I'm getting a different error, but I'm still running
> 2.063.2.
> The error I get is
> `Error: cannot resolve type for t.opDispatch!("x")`
> What version are you running?
I just updated to 2.064.2
> In any case, the reason apparently is multifold:
> 1. Apparently the proper error message isn't shown when using
> the property notation. (I'd have to check to see if it happens
> in 2.064 ... might be a fixed bug)
> 2. `.charAt(0)` doesn't exist for D's strings. You can just use
> bracket notation to access the index.
> 3. When args is empty (as it will be for a getter, when you
> call) args[0] doesn't exist, so `Error: array index [0] is
> outside array bounds [0 .. 0]`
>
> So fix 2 and 3 and it works for getting x. The reason I use a
> static if is to separate the cases where args has items and
> when it does not (since args[0] is invalid when args.length ==
> 0), so that'll be necessary to get it to work.
Okay 2 is fixed, leftovers of other languages in my mind.
Also took care of 3 I think but I may still be missing something.
Here is what I have now..
class Vector(int N, T) if (N <= 3) {
T[N] data;
this()
{
data[] = 0;
}
@property ref T opDispatch(string fieldName, Args ...)(Args
args)
if (Args.length < 2 && fieldName.length == 1 &&
toOffset(fieldName) < N)
{
int offset = fieldName[0 .. 1] - 'x';
if (args.length != 0)
return data[offset];
else
return data[offset] = args[0];
}
}
Same error.
More information about the Digitalmars-d-learn
mailing list