Hello Ellery,

On 04/10/2010 05:49 PM, so wrote:

struct vector(T, uint N) {
auto opDispatch(string s) const {
static if(N>0 && ("x"==s || "r"==s)) return v_[0];
static if(N>1 && ("y"==s || "g"==s)) return v_[0];
static if(N>2 && ("z"==s || "b"==s)) return v_[0];
static if(N>3 && ("w"==s || "a"==s)) return v_[0];
static assert("boom!");
}
private:
T[N] v_;
}
No unions, clean and all!
Then why do we need properties?
Can you get

vector!(int,3) v;
v.x = 1;
to work?

The closest I can get is

struct vector(T, uint N) {
ref T opDispatch(string s )() {
static if(N>0 && ("x"==s || "r"==s)) return v_[0];
static if(N>1 && ("y"==s || "g"==s)) return v_[1];
static if(N>2 && ("z"==s || "b"==s)) return v_[2];
static if(N>3 && ("w"==s || "a"==s)) return v_[3];
static assert("boom!");
}
private:
T[N] v_;
}
..

vector!(int, 3) v;
v.x() = 1;
when DMD sees

v.x = 1;

it tries to rewrite it as v.x(1);

And I can't figure out how to overload opDispatch


I think you might be able to do:

ret!(T) opDispatch(string s, T)(T t) { ... }

and then switch internally based on T.

--
... <IXOYE><



Reply via email to