是否可以定义一个带有多个参数的重载operator[]
?也就是说,我可以如下定义operator[]
:
//In some class
double operator[](const int a, const int b){
return big_array[a+offset*b];}
以后会像这样使用它?
double b=some_obj[7,3];
答案 0 :(得分:5)
没有。在C ++中这样做的惯用方法是
double b = some_obj[7][3];
答案 1 :(得分:5)
不,你不能重载operator[]
来获取多个参数。而不是
double b = some_obj[7,3];
使用
double b = some_obj[7][3];
This answer解释了如何创建代理对象以便能够使用后者。
否则,您可以重载operator()
以获取2个参数。
答案 2 :(得分:3)
不,C ++语法在
中表示double b=some_obj[7,3];
逗号是逗号运算符,而不是用于分隔参数的逗号。
答案 3 :(得分:2)
底线:不,不要混淆用户。
来自C++ FAQ:
记住运营商重载的目的:降低成本和 使用您的类的代码中的缺陷率。如果你创建运算符 混淆了你的用户(因为他们很酷,因为他们制作代码 更快,因为你需要向自己证明你可以做到; 并不重要,为什么),你违反了使用的全部原因 操作员首先进行超载。
答案 4 :(得分:2)
你可以做Andrea所建议的,或者你可以重载operator()
来获取两个参数:
// In some class
double operator()(const int a, const int b) {
return big_array[a + offset * b];
}
// Then use it like this:
double b = some_obj(7, 3);
答案 5 :(得分:1)
更好的方法是,operator()
,因为它不会阻止你创建临时数据并允许多个参数。更多详情请见C++ FAQ。
答案 6 :(得分:1)
你不能,但在这种情况下,我认为一个功能会更好,因为你的操作员在做什么并不直观。