1

プロジェクト内のさまざまなオブジェクトの位置を記述する構造があります。一部のオブジェクトは、2 つまたは 3 つなどのインデックスでインデックス付けされます。

この簡単な例では、3 種類の position を示しABおり、それらはすべて空であるCから継承しています。引数をとる関数でこれらの位置を渡すことができるように、Positionから継承します。単一の構造体を使用しない理由は、その中にすべてのメンバーを配置する必要がある ためです。ほとんどの場合、一部のオブジェクトについては、次のように使用し ます。PositionPositionPositionint a,b,c,dab

struct Position {
};

struct A : public Position {
    int a,b,c,d;
};

struct B : public Position {
    int a,b,c;
};

struct C : public Position {
    int a,b;
};

問題は、次のような関数があることです。

City &getCity(const Position &p) {
  const B &pos = (const B &)p;
  return rawSheets[pos.a].countries[pos.b].cities[pos.c];
}

Bこの関数に型の位置を渡せばすべて問題ありませんが、型を渡すとどうなりAますか? そして、私はそれをする必要があります。

4

1 に答える 1

1

実際には、次のように、それぞれが前のものよりも具体的な位置タイプの階層が必要なようです:

struct Position1 
{
    int a;
};

struct Position2 : public Position1
{
    int b;
};

struct Position3 : public Position2
{
    int c;
};

struct Position4 : public Position3
{
    int d;
};

そうすれば、 、またはが必要な場所ならPosition4どこでも使用でき、コードは余分な次元を無視します。Position1Position2Position3

于 2013-07-07T22:51:40.133 に答える