使用联合将相同的内存分配给类成员变量
我正在尝试对现有的 Vector 类进行矢量化
class Vector
{
public:
float X,Y,Z;
};
尝试在不影响访问这些成员变量的其他类的情况下对类成员进行矢量化
class Vector
{
public:
union{
float X,Y,Z;
vector float vec4;
};
};
,但存在编译器错误,因为找不到成员名称 X、Y、Z。有没有其他方法来获取变量?
作为参考,向量浮点
类型来自IBM™ Cell 宽带引擎™ 用于多核加速的软件开发套件V3.0。
I am trying to vectorize existing Vector class
class Vector
{
public:
float X,Y,Z;
};
Trying to vectorize the class members without affecting other classes accessing the these member variable
class Vector
{
public:
union{
float X,Y,Z;
vector float vec4;
};
};
But there is a compiler error as no memeber name X,Y,Z found. Is there a alternative way to get the variable?
For reference, the vector float
type comes from the IBM™ Cell Broadband Engine™
Software Development Kit V3.0 for Multicore Acceleration.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是我相信您可以使用标准 C++ 获得的最接近的结果 - 这使得 Vector 更大,并且需要您自己实现赋值运算符。
This is the closest I believe you can get with standard C++ - This makes Vector larger, and requires you to implement the assignment operator yourself.
在标准 C++ 中使用 union 无法做到这一点。您只能阅读您之前写过的内容。因此,编写
X
、Y
、Z
然后读取vec4
会产生未定义的行为。我建议创建一个成员函数
vector float toVector() const
,它将在需要时创建向量。或者您可以考虑定义一个成员运算符向量 float() const。There is no way to do that in standard C++ using union. You may only read what you have previously written. So writing
X
,Y
,Z
and then readingvec4
yields undefined behavior.I would suggest to create a member function
vector float toVector() const
that will create the vector when needed. Or you may consider defining a memberoperator vector float() const
.您无法完全按照您想要的方式进行操作(使用代码中的语法)。
一个正确的方法示例是:
然后您可以逐个元素地挑选。
或者:
但是您可以通过
.vX
访问值You can't do quite exactly what you want (using the syntax from your code).
One example correct way to do it:
And then you can pick off element by element.
Alternatively:
But then you access values via
.v.X
这应该可以解决问题。
This should do the trick.