如果想要实现一个二维数组,那么单纯的type *array = new type[][]这种形式是无法通过编译的,因为在C++中只有一维数组的概念,没有二维或多维数组的概念。但是通过如下形式便可以巧妙的实现二维数组
template<class T>
class Array2D {
public:
class Array1D {
public:
T& operator[](int index);
const T& operator[](int index) const;
...
};
Array1D operator[](int index);
const Array1D operator[](int index) const;
...
};
Array2D<float> data(10, 20);
cout << data[3][6];
每个Array1D对象象征一个一维数组,观念上它并不存在于Array2D的用户心中。凡“用来代表其他对象”的对象,常被称为proxy objects(替身对象),而用以表现proxy objects者,我们称为proxy classes。本例的Array1D便是个proxy class,其实体代表一个观念上并不存在的一维数组。proxy objects和proxy classes等术语并非全球通用:proxy objects有时被称为surrogates(代用品)。