Как насчет определения класса шаблона следующим образом:
template <class V, class I = int, class S = FullMatrix<V> >
class Matrix{
private:
S m_structure; //The matrix structure
I m_rowstart;//Row start index
I m_columnstart;//Column start index
}
Основными конструкторами будут
Matrix();
Matrix(size_t r, size_t c);//r rows and c columns
Matrix(size_t r, size_t c, I rowStart, I columnStart);//rowstart and columnstart are given start indices
Matrix(const Matrix<V, I, S>& source);
Тогда у вас будут функции для возврата минимальных / максимальных индексов строк / столбцовформы:
I MinRowIndex() const;
Далее у вас есть функции для определения количества строк / столбцов в матрице.
size_t Rows() const;
Затем функция, позволяющая заменять элементы в строке/ column другим массивом элементов
void Row(I row, const Array<V, I>& val);//Replace row
Затем перегрузите (), чтобы разрешить доступ к элементу в данной строке и столбце
const V& operator ()(I row, I column) const;//Get Element
V& operator() (I row, I column);
Хотя для выполнения вычислительных тестов может потребоватьсяпроверьте преимущества этого метода по сравнению с поддержанием большой матрицы и отдельных индексов пуска / останова различных подматриц (как это было предложено Лагербаером в другом потоке). Одним из преимуществ здесь является то, что каждая подматрица независима.Их можно перемещать, перемещать, заменять.Возможно, вам потребуется поддерживать матричную структуру более высокого уровня, в которой эта Матрица является подструктурой.
Но, похоже, она удовлетворяет ваш вопрос о возможности ссылаться на подматрицы независимо.