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

ユニオンを使用して標準のC++でそれを行う方法はありません。あなたは以前に書いたものだけを読むことができます。したがって、、、を書き込んXYからZ読み取るvec4と、未定義の動作が発生します。

vector float toVector() const必要に応じてベクトルを作成するメンバー関数を作成することをお勧めします。または、メンバーの定義を検討することもできますoperator vector float() const

于 2011-04-03T15:59:25.733 に答える
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 が大きくなり、代入演算子を自分で実装する必要があります。

于 2011-04-03T15:43:46.393 に答える
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

これでうまくいくはずです。

#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 に答える