我正在尝试对现有的Vector类进行矢量化
class Vector
{
public:
float X,Y,Z;
};
尝试对类成员进行向量化,而不会影响访问这些成员变量的其他类
class Vector
{
public:
union{
float X,Y,Z;
vector float vec4;
};
};
但是有一个编译器错误,因为找不到memeber名称X,Y,Z。有没有其他方法来获取变量?
作为参考,vector float
类型来自IBM™ Cell Broadband Engine™
Software Development Kit V3.0 for Multicore Acceleration。
答案 0 :(得分:0)
struct VectorData {
float X, Y, Z;
};
union VectorUnion {
VectorData VecData;
vector float vec4;
};
class Vector {
public:
Vector() : X(u.VecData.X), Y(u.VecData.Y), Z(u.VecData.Z) {}
float & X;
float & Y;
float & Z;
private:
VectorUnion u;
};
这是我认为你能用标准C ++得到的最接近的 - 这会使Vector变大,并要求你自己实现赋值运算符。
答案 1 :(得分:0)
使用union在标准C ++中无法做到这一点。您可能只阅读您之前撰写的内容。因此,撰写X
,Y
,Z
然后阅读vec4
会产生未定义的行为。
我建议创建一个成员函数vector float toVector() const
,它将在需要时创建向量。或者您可以考虑定义成员operator vector float() const
。
答案 2 :(得分:0)
您不能完全按照自己的意愿行事(使用代码中的语法)。
一个示例正确的方法:
union{
float coords[4];
vector float vec4;
};
然后你可以逐个元素地选择。
可替换地:
union{
struct {
float X, Y, Z;
} v;
vector float vec4;
};
但是您可以通过.v.X
答案 3 :(得分:0)
这应该可以解决问题。
#include <iostream>
using namespace std;
class Point
{
public:
Point() { X = 0.0f; Y = 0.0f; Z = 0.0f; };
~Point() {};
union
{
struct{
float X; float Y; float Z;
};
float index[3];
};
float operator[](int it)
{
return index[it];
};
};
void main()
{
Point p;
p.X = 1.0f;
p.Y = 2.0f;
p.Z = 3.0f;
cout << p[0] << " " << p[1] << " " << p[2] << endl;
p.index[0] = 4.0f;
p.index[1] = 5.0f;
p.index[2] = 6.0f;
cout << p[0] << " " << p[1] << " " << p[2] << endl;
cin.get();
}