On Friday, 8 November 2013 at 03:35:34 UTC, Ross Hays wrote:
Awesome that seems to do what I was going for. I had tried a
similar approach with @property dispatch and the subtraction of
'x', but I had left out the static if and had the opDispatch
returning a ref of the entry in the array (so there would just
be the one @property still) but that resulted in "Error: no
property 'x' for type 'test.Vector!(2, float).Vector'".
This is interesting, though probably not a very safe way to
handle vectors in the real world (even more so if they are
going to be vectors of more than length 3).
Indeed. Presumably you could modify it to shift the starting
letter (which is currently hardcoded as 'x') leftward as N grows
bigger to allow it to support more. But really, you would
probably be better to just use tuples. Technically a Vector is
just a Tuple!(T, "x", T, "y") so you could probably do better by
writing some metaprogramming to make one of those if you wanted a
short-hand for it. Otherwise just doing "alias Vector2(T) =
Tuple!(T, "x", T, "y");" would work great in 2.064.2, if I
remember the syntax correctly. Then Vector2!float would work.
Similarly Vector3 could be made and so on.
http://dlang.org/phobos/std_typecons.html#.Tuple
http://dlang.org/changelog.html#eponymous_template