多维下标,为什么在指针上使用代理?

时间:2014-09-24 19:51:00

标签: c++ arrays multidimensional-array

快速提问,我在google这个话题时唯一看到的是人们说使用代理是可行的方法。为什么返回指针不可行?

实例!

class example{
private:

int** arr;

public:
    int* operator[](const int index) {
        return arr[index];
    }
};

我们刚试过调用

 cout << example[0][0]; 
 5

并且它有效,我为什么要在创建代理类并调用proxys operator []以在数组中再达到一个“深度”时遇到麻烦?

1 个答案:

答案 0 :(得分:0)

我通常会为第二个下标编写一个代理,或者正如有些人在评论中建议的那样,使用Row类来代替更多的东西而不是下标。

那就是说,我喜欢代理方法,因为它可以重新安装经典的二维数组或指针指针下标sintaxes。但他们是最好的(可读,简单,有效)替代方案吗?我不确定。

有一个更简单的选择:超载operator()进行n维下标

class matrix
{
public:
    int operator()(std::size_t row , std::size_t column ) const
    {
        return _matrix[row][column];
    }
};

这也是一种非常着名的技术,被许多代数库使用。对于完全通用(n维)库,我认为它比一系列代理和[][][][][]...更合适。同样使用可变参数模板,更容易编写真正的n维通用下标运算符。