首页 > 解决方案 > 在 C++ 中重载“[][]”运算符

问题描述

我有一个包含大型二维数组的结构,其尺寸在编译时是固定的并且已知,类似于:

struct MyStruct{
   MyTypeName array[1000][10];
   .
   .
   . 
   [other stuff]
};

我希望能够访问这个结构的元素,

MyStruct a;
// some code that sets the array values
MyTypeName b = a[55][9];

但我不确定如何重载“ [][]”运算符。在 1D 情况下,以下将起作用:

struct My1Dstruct{
   MyTypeName array[1000];
   
   inline MyTypeName& operator[](int index){
       return array[index];
   }

   inline const MyTypeName& operator[](int index) const{
       return array[index];
   }
   .
   .
   .
   [other stuff]
}

但我无法弄清楚如何以简单的方式在二维上工作。

我阅读了这个先前的问题,但它需要比我更大的灵活性,因此对于我的目的来说答案似乎相当复杂。对于具有明确已知大小的 2D 数组的特定情况,是否有任何方法可以重载[][],而无需比直接访问数组更多的成本?(即理想情况下,我正在寻找一种b = a[55][9]开销为零的解决方案b = a.array[55][9]。)

标签: c++operator-overloading

解决方案


推荐阅读