行列を管理するクラスを作成したいのですが、コンストラクターで問題が発生しました。目的は、いくつかのコンストラクターが明確なままで同じヘッダーを持っていることを知って、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
...
ここでは、すべてのパラメーターがfloat
s であるため、コンストラクターをオーバーロードすることはできません。私が目にする唯一のことは、テンプレートを使用することですが、これらの特別な場合にのみ、何をすべきかわかりません。
解決
最後に、次のような抽象クラスを作成することにしました。
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);
// ...