0

GenericObject クラスに構造体をパラメーターとして取得する必要がある関数がありますが、この構造体はその子クラスによって提供されます。これらの構造体はすべて同じメンバーを持ちますが、行列のサイズは異なります。

この関数は構造体を取得します (パラメーターは明らかに間違っています):

void GenericObject::SetTexture(struct* _myStructOffset)
{
    for (int i = 0; i < stateNumber; i++)
    {
        for (int j = 0; j < indexNumber; j++)
        {
            SetTextureOffset(i, j, _myStructOffset[i][j]->xTex0, _myStructOffset[i][j]->xTex1, _myStructOffset[i][j]->yTex0, _myStructOffset[i][j]->yTex1, 100/*_myGenericOffset->imageW*/, 100/*_myGenericOffset->imageH*/);
        }
        GetMyAnimatedSprite()->SetAnimationToList();
    }
}

構造例:

    struct ButtonsData
    {
        float xTex0;
        float yTex0;
        float xTex1;
        float yTex1;
    }
    ButtonOffset1[3][1]
    ;

そして、次のような方法で動作するはずです:

void Button::SetTexture()
{
    GenericObject::SetTexture(&ButtonOffset1);
}

どうすれば作れますか?

前もって感謝します。

4

2 に答える 2

1

構造体がすべて同じメンバーを持っている場合、なぜ子クラスでそれを再定義するのですか?

答えは、「異なるマトリックスサイズ」とは、静的に宣言されたサイズが異なる2D配列メンバーを持っていること、つまり同じメンバーを持っていないことを意味しているのではないかと思います。

3つの解決策。

  • 構造体定義が1つだけで、実行時に必要なマトリックスサイズを割り当てます
  • 仮想アクセサ機能。行列を返す仮想関数を使用して基本構造体を作成し、それらを介してのみ行列にアクセスします。
  • 関数をテンプレート化します。

構造体のメンバーがすべて同じ名前である場合は、これで十分です。

template <typename STRUCT_T>
void GenericObject::SetTexture(struct STRUCT_T *_myStructOffset)
{
...
}

明らかに、これはテンプレートであるため、関数定義は.cppではなくヘッダーファイルに表示される必要があります。

于 2012-07-12T03:28:13.033 に答える
0

ありがとう@アダム!さらなる研究のために私が得た決議をここにしましょう。

関数をテンプレート化することは実際にはオプションでしたが、構造体で使用することについて混乱していました。昨日と今日のいくつかのテストの後、私はこの動作バージョンに到達しました:

template <typename STRUCT_T>
void SetTexture(STRUCT_T _myStructOffset[][])
{
    ...
}

そして、構造体宣言の例:

struct Buttons 
{
    float xTex0;
    float yTex0;
    float xTex1;
    float yTex1;
}
ButtonOffset1[3][1]
;

どうもありがとう。

于 2012-07-12T15:36:48.977 に答える