25.10.2013 02:08, Adam D. Ruppe пишет:
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.
I thought to use union, but using struct with properties is good to know. Thanks for sharing!

Reply via email to