1

我正在尝试矢量化现有的 Vector 类

class Vector
{
 public:
   float X,Y,Z;
};

尝试向量化类成员而不影响访问这些成员变量的其他类

class Vector
{
 public:
   union{
      float X,Y,Z;
      vector float vec4;
   };
};

但是由于没有找到成员名称 X,Y,Z 存在编译器错误。是否有另一种获取变量的方法?

作为参考,该vector float类型来自IBM™ Cell Broadband Engine™ Software Development Kit V3.0 for Multicore Acceleration

4

4 回答 4

0

您不能完全按照您的意愿去做(使用代码中的语法)。

一个正确的示例方法:

union{
    float coords[4];
    vector float vec4;
};

然后你可以逐个元素地挑选。

或者:

union{
    struct {
        float X, Y, Z;
    } v;
    vector float vec4;
};

但是然后您可以通过以下方式访问值.v.X

于 2011-08-28T05:29:55.613 回答
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;
};

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.

于 2011-04-03T15:43:46.393 回答
0

在使用联合的标准 C++ 中没有办法做到这一点。你只能阅读你以前写过的东西。因此,写入X, YZ然后读取会vec4产生未定义的行为。

我建议创建一个成员函数vector float toVector() const,在需要时创建向量。或者您可以考虑定义一个 member operator vector float() const

于 2011-04-03T15:59:25.733 回答
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();
}
于 2013-11-14T21:52:07.267 回答