Я могу определить в C++ оператор массива, который берет несколько аргументов? Я попробовал его как это:
const T& operator[](const int i, const int j, const int k) const{
return m_cells[k*m_resSqr+j*m_res+i];
}
T& operator[](const int i, const int j, const int k){
return m_cells[k*m_resSqr+j*m_res+i];
}
Но я получаю эту ошибку:
error C2804 binary operator '[' has too many parameters
Нет, вы не можете перегрузить оператор []
, чтобы принять несколько аргументов. Вместо этого вы можете перегрузить operator ()
. См. Как создать оператор индекса для класса Matrix? из FAQ по C ++.
Невозможно перегрузить оператор []
для приема нескольких аргументов, но альтернативой является использование прокси-шаблона .
В двух словах: a [x] [y]
, первое выражение ( a [x]
) вернет другой тип с именем прокси-тип, который будет иметь другой оператор []
. Он будет вызывать что-то вроде _storedReferenceToOriginalObject-> At (x, y)
исходного класса.
Вы не сможете выполнить a [x, y]
, но я полагаю, вы все равно хотели перегрузить обычный синтаксис 2D-массива в стиле C ++.