快速提问,我在google这个话题时唯一看到的是人们说使用代理是可行的方法。为什么返回指针不可行?
实例!
class example{
private:
int** arr;
public:
int* operator[](const int index) {
return arr[index];
}
};
我们刚试过调用
cout << example[0][0];
5
并且它有效,我为什么要在创建代理类并调用proxys operator []以在数组中再达到一个“深度”时遇到麻烦?
答案 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维通用下标运算符。