Info
-
Did you know about C++2X proposal to add Multidimensional subscript operator?
Example
template <class T, auto Dimensions> class mdarray2 {
public:
template <class I1, class I2> constexpr T &operator[](I1 i1, I2 i2) {
return vs_[i1][i2];
}
private:
std::array<std::array<T, 2>, Dimensions> vs_{};
};
int main() {
mdarray2<int, 2> a{};
a[1, 1] = 42;
assert(0 == (a[0, 0]));
assert(42 == (a[1, 1]));
}
Puzzle
- Can you implement a generic multidimensional array with multidimensional subscript operator?
template <class T, std::size_t N>
class mdarray; // TODO
int main() {
using namespace boost::ut;
"mdarray"_test = [] {
"support multiple dimenions"_test = [] {
mdarray<int, 2> a{2, 2};
a[1, 1] = 42;
expect(42_i == a[1, 1]);
};
"support multiple dimenions with different sizes"_test = [] {
mdarray<int, 3> a{1, 3, 2};
a[0, 1, 1] = 42;
a[0, 2, 0] = 84;
expect(0_i == a[0,0,0]);
expect(0_i == a[0,2,1]);
expect(42_i == a[0,1,1]);
expect(84_i == a[0,2,0]);
};
};
}
Solutions