На самом деле у меня вопрос о двумерных массивах в C++. Первый вопрос заключается в том, как компилятор интерпретирует двумерный массив с разницей в "нормальном" одномерном массиве. Затем мне нужно реализовать перегрузку оператора для двухмерных массивов.
Это перегруженный оператор для нормального массива:
const float& Matrix::operator[] (int index) const
{
const float& value = this->m[index];
return value;
}
Это перегруженный оператор для двухмерного массива:
const float& Matrix::operator[][](int index, int ndIndex) const
{
const float& value = this->m[index][ndIndex];
return value;
}
Это теоретическая правильная реализация для перегрузки оператора [] []?
Тогда возникает вопрос, почему трудно получить доступ на запись к массиву в решении [] []. Последний вопрос заключается в том, что эта проблема может быть решена с помощью прокси-шаблона, но я никогда не слышал прокси как шаблон программы.
Все эти вопросы являются теоретическими, поэтому мне не нужен настоящий код, просто контекст "за сценой" и схема прокси-шаблона.
Было бы здорово, если бы вы могли мне помочь! Заранее спасибо!!
В C++
нет operator[][]
C++
. Вам не нужен фантастический прокси, просто перегрузите operator[]
и заставьте его вернуть массив (который соответствует строке). В некотором смысле, это прокси (массив, который вы возвращаете)
Что-то вроде:
float* Matrix::operator[](int row) // non-const version
{
return m[row];
}
а также
const float* Matrix::operator[](int row) const // const overload
{
return m[row];
}
(В следующий раз задайте 2 вопроса, если у вас есть 2 вопроса. SO is free.)
Чтобы прояснить вторую часть вопроса, объект Proxy - это объект, который обозначает строку 2D-массива. Он возвращается оператором первого уровня operator[]
, а сам прокси реализует второй operator[]
.
const
(т.е. сconst
ссылками и т. Д.).