In caso di dubbio, cambiare la struttura dei dati a seconda delle applicazioni:
struct xyz
{
float p[3];
};
Per facilitare la lettura si può prendere in considerazione:
struct xyz
{
enum { x_index = 0, y_index, z_index, MAX_FLOATS};
float p[MAX_FLOATS];
float X(void) const {return p[x_index];}
float X(const float& new_x) {p[x_index] = new_x;}
float Y(void) const {return p[y_index];}
float Y(const float& new_y) {p[y_index] = new_y;}
float Z(void) const {return p[z_index];}
float Z(const float& new_z) {p[z_index] = new_z;}
};
Forse anche aggiungere un po 'di incapsulamento:
struct Functor
{
virtual void operator()(const float& f) = 0;
};
struct xyz
{
void for_each(Functor& ftor)
{
ftor(p[0]);
ftor(p[1]);
ftor(p[2]);
return;
}
private:
float p[3];
}
In generale, se una struttura dati deve essere trattata in due o più modi diversi, forse il la struttura dei dati deve essere ridisegnata; o il codice.
fonte
2010-01-18 20:01:30
Penso che sì fintanto che tutti i membri 'float' sono uno accanto all'altro, ma non ho letto lo Standard :) – kennytm
@KennyTM Quello che hai detto è vero, ma la parte importante è" ... come a lungo tutti i membri del float sono uno accanto all'altro ... ". Non c'è motivo di presumere che siano tutti vicini l'uno all'altro. –
Poiché questa tecnica può essere controversa, un design migliore è avere una matrice all'interno di 'struct'. –