3

行列を管理するクラスを作成したいのですが、コンストラクターで問題が発生しました。目的は、いくつかのコンストラクターが明確なままで同じヘッダーを持っていることを知って、Matrix オブジェクトのコンストラクターを呼び出す最短の方法を見つけることです。これは私が取得しようとしていることのアイデアです:

Matrix id; // create identity matrix
Matrix scale(x, y, z); // create directly a scale matrix
Matrix translation(x, y, z) // create a translation matrix
...

ここでは、すべてのパラメーターがfloats であるため、コンストラクターをオーバーロードすることはできません。私が目にする唯一のことは、テンプレートを使用することですが、これらの特別な場合にのみ、何をすべきかわかりません。

解決

最後に、次のような抽象クラスを作成することにしました。

class _Mat
{
    public :
        virtual ~_Mat(void) = 0;

        // ...
}

class Mat : public _Mat
{
    public :
        Mat(void);
        virtual ~Mat(void);

        class Scale : public _Mat
        {
            public :
                Scale(float x, float y, float z);
                vitual ~Scale(void);

                // ...
        }

        // ...
}

すべてが定義され_Mat、他のクラスはコンストラクターに役立つだけです

最後に、次のようにコンストラクターを呼び出すことができます。

Mat id;
Mat::Scale scale(2, 2, 2);
// ...
4

3 に答える 3