私が電話するとき:a7[0][1][100];
の最初のインデックスを取得できます0
がoperator[]
、インデックスとして他のインデックス値 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;
}