0

x、y、z 値を格納するクラス 'Vector' があります。「Vector」の複数のオブジェクトを持つ「クラス」があります。

Camera::Camera(Vector Pos, Vector LookAt, Vector UpDir)
{
}
Camera Cam(Vector(3,3,3), Vector(0,0,0), Vector(0,0,0));

Vector(0,0,0) を渡したくない場合もあります。NULL を渡して、LookAt/UpDir == NULL かどうかをテストしたいのですが、この状況では NULL は機能したくありません。私は何をすべきか?

これが理にかなっていることを願っています

4

4 に答える 4

0

オブジェクトVectorが無効な状態になる可能性がある場合は、次のアプローチを使用できます。

class Vector
{
public:
   int x, y, z;
   bool valid;

   Vector() : x(0), y(0), z(0), valid(false) {}
   Vector(int x, int y, int z) : x(x), y(y), z(z), valid(true) {}
};

次に、Cameraクラス:

class Camera
{
public:
    Camera(const Vector &pos, const Vector &lookAt, const Vector &upDir)
    {
        if (!lookAt.valid) {...}
    }
};

使用法:

Camera c(Vector(1,2,3), Vector(), Vector());

デフォルト値の静的インスタンスを定義できます。

class Vector
{
public:
    static Vector INVALID;
private: Vector(); // make invalid constructor private
};

Vector Vector::IVALID;

使用法:

Camera c(Vector(123), Vector::INVALID, Vector(12,4,5));
于 2013-04-21T00:58:38.160 に答える
0

可能であれば、インターフェースをベクトルのポインターに変更してください。

Camera::Camera(Vector *Pos, Vector *LookAt, Vector *UpDir)
{
}

そして、ベクトルのアドレスで呼び出します。

Camera Cam(&v1, &v2, NULL);
于 2013-04-20T17:33:30.413 に答える