联盟黑客需要
我有一个表示顶点的结构。 它有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本身一样。