On Thursday, 24 October 2013 at 17:59:03 UTC, Alexandr Druzhinin wrote:
foo(cast(float[]) points); // is it safe?

Two options would be to make the points itself be a float[] with the names just properties into the index:

struct Point {
 float[7] data;
 ref float x() { return data[0]; }
 ref float y() { return data[1]; }
 // etc etc etc
}

then to use it, just pass point.data[] instead of casting.

Or you could also do a union:

struct Point {
   union {
      float[7] data;
      struct {
         float x,y,z,r,g,b,a;
      }
   }
}

and again, pass point.data[] instead of casting it, while continuing to use the other members normally.

These are both well defined so are less likely to break than the cast.

Reply via email to