現在作っているDirectXライブラリで悩んでいることがあるので質問させていただきます。
例えば、読み込んだ画像をVector2で表した特定の場所に表示する以下のような関数があったとします。
Vector2は2次元ベクトルを表す自作クラスです。
void drawImage( Vector2& vPos )また他には画像を拡大縮小・回転・拡大縮小+回転を行ってから表示させるような関数があるとします。
(実際には、任意軸周りの回転などの変形も作成する予定です)
void drawScaleImage( Vector2& vPos, Vector2& vScale ) void drawRotateImage( Vector2& vPos, float angle ) void drawScaleRotateImage( Vector2& vPos, Vector2& vScale, float angle )このような関数が例えばImageというクラスのメンバ関数であったとします。
class Image { ... public: drawImage(...); drawScaleImage(...); drawRotateImage(...); drawScaleRotateImage(...); };この場合、それぞれのメンバ関数の定義は特定の部分を除き、互いにコードが重複してしまい、重複した部分を変更するとき全てのメンバ関数の定義を変更しなくてはならなくメンテナンスが大変です。
これに対してdrawImageというメンバ関数だけを考え、その引数に列挙型(TransformMethod)を与えて変形の種類を決めるという方法を考えました。
例えば、
void drawImage( Vector2& vPos, Vector2& vScale, float angle, TransformMethod tm )といった感じです。
使い方は、拡大縮小なら
drawImage( vP, vS, 0, TRANSFORM_SCALING )回転なら
drawImage( vP, vS, 0.3f, TRANSFORM_ROTATION )といった感じです。
これだとメンテナンスもしやすく、コードの重複も起こらないのですが、引数の数が多く関数の内部で余計な処理を行う必要があり実行速度が遅くなってしまいます。
現在は前者の方法を用いているのですが、後のことを考えると後者にしたほうがよいのか迷ってます。
皆さんだったらどちらを選びますか?
また選んだ理由は何でしょうか?
それとも何かよりよい方法があるのでしょうか?
よろしくお願いします。