C++ [] выстраивает оператор с несколькими аргументами?

Я могу определить в 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
50
задан Jon Seigel 10 April 2010 в 07:20
поделиться

2 ответа

Нет, вы не можете перегрузить оператор [] , чтобы принять несколько аргументов. Вместо этого вы можете перегрузить operator () . См. Как создать оператор индекса для класса Matrix? из FAQ по C ++.

46
ответ дан 7 November 2019 в 10:36
поделиться

Невозможно перегрузить оператор [] для приема нескольких аргументов, но альтернативой является использование прокси-шаблона .

В двух словах: a [x] [y] , первое выражение ( a [x] ) вернет другой тип с именем прокси-тип, который будет иметь другой оператор [] . Он будет вызывать что-то вроде _storedReferenceToOriginalObject-> At (x, y) исходного класса.

Вы не сможете выполнить a [x, y] , но я полагаю, вы все равно хотели перегрузить обычный синтаксис 2D-массива в стиле C ++.

41
ответ дан 7 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: