联盟黑客需要

我有一个表示顶点的结构。 它有x,y和z字段以及其他几个字段。 最近我得出结论,对于某些function,我将需要以数组的forms访问顶点的坐标。 我不想用临时变量“污染”代码或者将所有看起来像这个vy改为这个v.coord[1] ,这不是很好也不优雅。 所以我考虑使用工会。 像这样的东西应该工作:

 struct { float x,y,z; } Point; struct { union { float coord[3]; Point p; }; } Vertex; 

这很好,但并不完美。 点类没有意义。 我希望能够通过键入vy (而不是vpy )来访问y坐标。
你能建议一个黑客来解决这个问题(或者告诉我这是不可能的)?

一个好的C ++方法是使用返回元素引用的命名访问器:

 class Point { public: float& operator[](int x) { assert(x <= 2); return coords_[x]; } float operator[](int x) const { assert(x <= 2); return coords_[x]; } float& X() { return coords_[0]; } float X() const { return coords_[0]; } float& Y() { return coords_[1]; } float Y() const { return coords_[1]; } float& Z() { return coords_[2]; } float Z() const { return coords_[2]; } private: float coords_[3]; }; 

用这种方法,给出一个Point p; ,您可以使用p[0]pX()来访问内部coords_数组的初始元素。

好的,这应该适合你

 struct { union { float coord[3]; struct { float x,y,z; }; }; } Vertex; 

这段代码的作用是将数组与结构联合起来,因此它们共享相同的内存。 由于结构不包含名称,因此无需名称即可访问,就像union本身一样。