У меня есть этот векторный класс (с использованием std :: vector), в котором я определяю диапазон доступных элементов от min до max
template <typename T>
class MyVec {
vector<T> vec;
int rangemin;
int rangemax;
//All kinds of methods
const T& operator[](int i) const {
//Conditions on i, ~NOT TAKING INTO CONSIDERATION RANGE~ and throwing exception
return static_cast<const T&>(vec[i]);
}
T& operator[](int i) {
//Conditions on i, ~TAKING INTO CONSIDERATION RANGE~ and throwing exception
return vec[i];
}
};
И затем я использую этот класс для определения класса матрицнекоторые элементы доступны только для чтения (устанавливая диапазон в каждой строке)
template <typename T>
class MyMatrix {
vector<MyVec<T>> arr;
size_t rows, columns;
bool isUpper;
//All kinds of methods
MyVec<T>& operator[](int row) {
//Checking conditions on row and throwing exception
return arr[row];
}
MyVec<T> const& operator[](int row) const {
//Checking conditions on row and throwing exception
return arr[row];
}
class iterator;
}
Теперь этот механизм действительно работает, когда я пытаюсь записать недопустимый элемент с помощью m[i][j] = val
, но при реализации следующегоiterator
class MtmMat<T>::iterator {
const MyMat<T>* mat;
int row, column;
friend class MyMat<T>;
//Some methods
public:
T& operator*() {
return const_cast<T&>((*matrix)[row][column]);
}
T const& operator*() const {
return (*matrix)[row][column];
}
};
Когда у меня есть итератор, который указывает на элемент, который должен быть только для чтения, можно писать в!По какой-то причине в методе MyVec
используется метод, который не учитывает диапазон.Как я могу это исправить?
Заранее спасибо!