我想创造一个d矢量结构是这样工作的:在D中允许[i]和.xyz-operations的快速向量结构?
vec u, v;
vec w = [2,6,8];
v.x = 9; // Sets x
v[1] = w.y; // Sets y
u = v; // Should copy data
后来我也想补充的东西一样u = v * u
等,但上述将为现在要做的。
这是多远我来:
struct vec3f
{
float[3] data;
alias data this;
@property
{
float x(float f) { return data[0] = f; }
float y(float f) { return data[1] = f; }
float z(float f) { return data[2] = f; }
float x() { return data[0]; }
float y() { return data[1]; }
float z() { return data[2]; }
}
void opAssign(float[3] v)
{
data[0] = v[0];
data[1] = v[1];
data[2] = v[2];
}
}
现在,这几乎使得它的工作就像我想要的,但我觉得,如果这是“正确的”非常不确定。 opAssign()是否应该返回一些值?
我也想知道这是否真的如此快?我试过添加alias data[0] x;
等,但这不起作用。有任何想法吗?或者这是“它是如何完成的”?也许编译器足够聪明,弄清楚propery函数是或多或少的别名?
+1,我有与opDispatch相同的想法。我仍然处于D的早期阶段,所以我的解决方案可能不如以前那么好。虽然编译时你可以做的事情是令人难以置信的! – shambulator 2010-07-28 22:46:47