是否可以定義一個超過一個參數的超載operator[]
?也就是說,我可以如下定義operator[]
:C++的運算符[]可以使用多個參數嗎?
//In some class
double operator[](const int a, const int b){
return big_array[a+offset*b];}
以後用它是這樣嗎?
double b=some_obj[7,3];
是否可以定義一個超過一個參數的超載operator[]
?也就是說,我可以如下定義operator[]
:C++的運算符[]可以使用多個參數嗎?
//In some class
double operator[](const int a, const int b){
return big_array[a+offset*b];}
以後用它是這樣嗎?
double b=some_obj[7,3];
不,你不能重載operator[]
採取多個參數。取而代之的
double b = some_obj[7,3];
使用
double b = some_obj[7][3];
This answer介紹如何創建一個代理對象,以便能夠後者。
否則,您可以重載operator()
以獲取2個參數。
號慣用的方式做,在C++是
double b = some_obj[7][3];
雖然這並不一定是最好的方法,它需要有些尷尬的代理類,如果你做正確。根據你真正想要的內容,使用帶有兩個參數的'operator()'可以更簡單。 – leftaroundabout
沒有,C++的語法說,在
double b=some_obj[7,3];
逗號是逗號運算符,而不是逗號即分離參數。
更好的方法來做到這一點,因爲它不鎖定你創建臨時對象,並允許多個參數,是operator()
。更多詳情請見C++ FAQ。
底線:不,不要混淆你的用戶。
從C++ FAQ:
記住運算符重載的目的:降低成本,並在代碼 缺陷率,使用你的類。如果您創建的運營商認爲您的用戶感到困惑(因爲他們很酷,因爲他們使代碼更快,因爲您需要證明自己可以做到這一點; 並不重要),您違反了首先使用 運算符重載的全部原因。
你可以做什麼安德烈建議,或者你可以重載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);
甚至更好(在我看來,至少):做一個函數「get」,「at」或類似的東西,有兩個參數。在大多數情況下,它會使代碼更清晰,而不是重載operator()。 –