C++23引入了可以通过像[i]一样通过下标直接访问类成员的方式:
#include <array>
#include <cassert>
#include <iostream>
using namespace std;
template <typename T, size_t Z, size_t Y, size_t X>
class Array3d
{
public:
constexpr T& operator[](size_t z, size_t y, size_t x)
{
assert(x < X and y < Y and z < Z);
return m[z * Y * X + y * X + x];
}
private:
array<T, X * Y * Z> m{};
};
int main()
{
Array3d<int, 4, 4, 4> v;
cout << "v[3, 2, 1] = " << v[3, 2, 1] << '\n';
v[3, 2, 1] = 666;
cout << "v[3, 2, 1] = " << v[3, 2, 1] << '\n';
return 0;
}
//g++ -o 3d 3d.cpp -std=c++23
运行程序输出:
v[3, 2, 1] = 0
v[3, 2, 1] = 666
可以看到C++23中的operator[]可以支持多个参数表示的多个维度了。