1

私はカスタムシェイプクラスを持っており、ここでの質問のために簡略化されており、次のようになります。

class Shape : public SpriteProperties{

};

ここで、クラスSpritePropertiesは次のとおりです。

class SpriteProperties{
Point rotationPivotPoint;
Point rotationPivtoAxes;
float width, height, xPos, yPos, zPos;
Point color;
};

ユーザーのコードでは、ユーザーが形状を初期化するときに、次のプロトタイプの関数を使用します。関数のパラメータは、表現する形状に必要なプロパティです。

void init(float _x, float _y, float _w, float _h, Point* _color)
{
    //Initialize the shape
}

ただし、私の図形には回転ピボットポイントや軸などの追加のプロパティもあり、ユーザーはこの初期化プロセス中に何らかの方法で指定する必要があります。これらの回転プロパティは、ユーザーがどのように使用したかによって、後で使用される場合と使用されない場合があります。クラス。

void prepareRotationParams(Point* _rotationPivot, Point* _rotationAxes)
{
    //
}

私の質問:コードの後半で使用される可能性のあるこのprepare ローテーション関数の使用をユーザーに制限することを考えていますが、同時に、init関数自体にpreparerotationパラメーターを指定したくありません。mustユーザーがどの形状に対しても明示的に指定したコアプロパティと一致しないでください。理想的なアプローチは何でしょうか?

4

2 に答える 2

1

デフォルトの引数を使用します。

void init(float _x, float _y, float _w, float _h, Point* _color, Point* rPivot=0, Point *rAxes=0)
{
    //Initialize the shape
    if (rPivot && rAxes) {
        prepareRotationParams(rPivot, rAxes);
    }
}
于 2012-12-13T06:46:09.093 に答える
0

まず、コンストラクタで引数を渡すことを検討してください。もちろん、これが不可能な場合もあります。

次に、回転パラメータは一度設定すると一定ですか、それとも複数回設定できますか? 1 回しか設定できず、2 回の設​​定がサポートされていない場合は、設計を再検討してください。基本的に 3 つの初期化関数 ( constructorinitprepareRotationParams) があるため、ユーザーが部分的に初期化されたオブジェクトを誤って使用しやすくなります。

3 つの初期化関数を使用する代わりに、ビルダー パターンを検討してください。 http://en.wikipedia.org/wiki/Builder_pattern

于 2012-12-13T09:37:06.247 に答える