【发布时间】:2016-07-11 02:59:50
【问题描述】:
如何重载多维括号?
假设我有一个类可以让我访问 n 向量空间中的点。例如:
class NSpaceVector {
private:
int vectorSpace[8][8][8][8][8][8][8];
public:
const NSpaceVector operator[][][][][][][](int i, int j, int k, int l, int m, int n, int p)const {return vectorSpace[i][j][k][l][m][n][p]; }
NSpaceVector operator[][][][][][][](int i, int j, int k, int l, int m, int n, int p) {return vectorSpace[i][j][k][l][m][n][p]; }
}
unsigned long & operator [](int i) {return registers[i];}
我想做的是重载括号运算符,以便我可以像这样索引到这个位置:
int main() {
NSpaceVector nsv; // Assume initializes all to 0
nsv[2][4][7][4][0][7][6] = 2;
cout << nsv[2][4][7][4][0][7][6] << endl; //-> 2
cout << nsv[1][4][7][4][0][7][6] << endl; //-> 0
return 0;
}
我无法编译它。有任何想法吗?谢谢,基思 :^)
【问题讨论】:
-
您不能重载多维括号,因为 C++ 中没有这样的运算符。相反,您必须重载单个括号以返回一种代理对象,因为一维括号的每个重载都意味着第二级索引,这将返回另一个代理......等等。
-
阅读本文以获得更好的方法来执行此操作
operator(): isocpp.org/wiki/faq/operator-overloading#matrix-array-of-array -
或者,寻找不同的语法。喜欢
nsv(1,2,3,4,5,6,7)或nsv[{1,2,3,4,5,6,7}]。 -
严格来说不是重复的,因为这是一个很容易回答的特殊情况:
auto& operator[](int i) {return vectorSpace[i]; }- 应该可以按预期工作。
标签: c++ operator-overloading brackets square-bracket