tôi muốn tạo một cấu trúc vector trong D mà làm việc như thế này:Cấu trúc véc tơ nhanh cho phép hoạt động [i] và .xyz trong D?
vec u, v;
vec w = [2,6,8];
v.x = 9; // Sets x
v[1] = w.y; // Sets y
u = v; // Should copy data
Sau đó tôi cũng muốn thêm thứ như u = v * u
vv Nhưng ở trên sẽ làm cho bây giờ.
Đây là cách xa tôi đã đến:
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];
}
}
Bây giờ này khá nhiều làm cho nó làm việc như tôi muốn, nhưng tôi cảm thấy rất chắc chắn về nếu điều này là "đúng". Liệu opAssign() có lẽ trả về một số giá trị?
Tôi cũng tự hỏi nếu điều này thực sự nhanh như nó có thể? Tôi đã thử thêm alias data[0] x;
v.v. nhưng điều đó không hoạt động. Bất kỳ ý tưởng? Hoặc là "làm thế nào nó được thực hiện"? Có lẽ trình biên dịch đủ thông minh để tìm ra các hàm thích hợp là nhiều hoặc ít bí danh?
+1, tôi đã có ý tưởng tương tự cho sự gian lận với opDispatch. Tôi vẫn đang ở giai đoạn đầu của D, vì vậy giải pháp của tôi có lẽ không tốt bằng nó. Các công cụ biên dịch thời gian bạn có thể làm là tâm-boggling, mặc dù! – shambulator