5

私が電話するとき:a7[0][1][100];

の最初のインデックスを取得できます0operator[]、インデックスとして他のインデックス値 1 と 100 を再帰的に取得することはできません。operator[]再帰的な次のインデックス値を取得するためにどのように使用できますか。この 3 次元配列の例では、operator[]は最初の次元である に対して 1 回だけ呼び出され0ます。

私のコード例は次のとおりです。

template <class T, unsigned ... RestD> struct array;

template <class T, unsigned PrimaryD>
struct array <T, PrimaryD> {
    typedef T type[PrimaryD];

    type data;

    T& operator[] (unsigned i) {
        return data[i];
    }
}; 

template <class T, unsigned PrimaryD, unsigned ... RestD>
struct array <T, PrimaryD, RestD...> {
    typedef typename array<T, RestD...>::type OneDimensionDownArrayT;
    typedef OneDimensionDownArrayT type[PrimaryD];

    type data;

    OneDimensionDownArrayT& operator[] (int i) {
        OneDimensionDownArrayT& a = data[i];
        return a;
    }
}; 

int main () {

    array<int, 1, 2, 3> a7 {{{{1, 2, 3},{4, 5, 6}}}};
    a7[0][1][2] = 100; //=>won't recursively go through operator[]
                     //I want to recursively  obtain 0, 1 and 2 as index values

    a7[0][1][100] = 100; //also works correctly.
    std::cout << a7[0][1][100] << std::endl;

    return 0;
}
4

2 に答える 2

1

[]多次元配列で連続して演算子を使用する場合、それぞれ[]が (1 つ少ない) 次元配列を返す必要があります。

多次元配列の型が次の場合:

template <class Type, int dim> MArray;

次に、 aは aMArray<SomeType, n>::operator[]を返す必要がありMArray<SomeType, n-1>ます。オブジェクト (できれば参照) を返す特別な 1-D 配列、またはネイティブの 1-D 配列を返す 2-D 配列の特殊なケースがあります。この例では過度に単純化した表記法を使用しましたが、重要なのは nD [] 演算子が (n-1)-D 配列を返すことです。

于 2013-05-20T22:38:33.180 に答える