Mi piacerebbe creare una struttura vettore in D che funziona in questo modo:Strutturazione vettoriale veloce che consente operazioni [i] e .xyz in 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
tardi Vorrei anche aggiungere cose come u = v * u
ecc Ma quanto sopra farà per ora.
Questo è quanto sono venuto:
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];
}
}
Ora, questo lo rende più o meno funziona come avrei voluto, ma mi sento molto sicuro di se questo è "giusto". L'opAssign() dovrebbe forse restituire qualche valore?
Mi chiedo anche se questo è veramente veloce come può essere? Ho provato ad aggiungere alias data[0] x;
ecc. Ma non funziona. Qualche idea? O è questo "come è fatto"? Forse il compilatore è abbastanza intelligente da capire che le funzioni corrette sono più o meno alias?
+1, ho avuto la stessa idea per il swizzling con opDispatch. Sono ancora nelle prime fasi di D, quindi la mia soluzione probabilmente non è buona come potrebbe essere. Ma le cose in fase di compilazione che puoi fare sono sbalorditive! – shambulator