У меня есть некоторые округлости в моих определениях класса шаблона - PullRequest
0 голосов
/ 22 июня 2010

У меня есть класс матрицы, который принимает ссылочный тип строки и столбца, который можно использовать для доступа к нему в качестве параметров шаблона. Между тем, типы строк и столбцов передаются типу матрицы, который они представляют.

Есть ли способ разорвать эту круглость? Вот несколько демонстрационных фрагментов кода:

#include "MatrixConcreteType.h"
template <class MatrixType>
class rowType <MatrixType>
{...}

А в матричном файле:

#include "VectorTypes.h"
template <class row_t, class col_t>
class Matrix
{...}

Полагаю, я мог бы попробовать удачно расположенный экстерьер?

1 Ответ

1 голос
/ 22 июня 2010

Если я правильно понимаю ваш вопрос, вы пытаетесь определить Matrix как шаблон, принимая тип строки и тип столбца, а затем rowType (и я предполагаю также columnType) как шаблоны типа матрицы.Мой большой вопрос: где фактические данные?В какой-то момент, я предполагаю, что эта Матрица должна фактически разбиваться на структурированную группу целых чисел, или удваивается, или символ, или обратные итераторы указателей на bools, или что-то еще.Где это?

Ваша округлость, кажется, является признаком попытки создать слишком много архитектуры.Выясните, в каком классе вы хотите на самом деле хранить данные, сделайте параметр шаблона этого класса типом этих данных, а затем сделайте параметр шаблона всех других связанных классов либо основным классом, либо типом данных.например:

template <class DataType>
class Matrix{
    //store the data in here: a DataType [], or vector<DataType>, or something
}

и:

template <class MatrixType>
class Row{
    //has something which refers back to the original matrix of type MatrixType
}

или

template <class DataType>
class Row{
    //has something which refers back to the original matrix of type Matrix<DataType>
}

Я бы предложил использовать вторую из вышеупомянутых альтернатив, так как это облегчаетобратитесь к классу Row в классе Matrix, например:

template <class DataType>
Row<DataType> Matrix::getRow(int index){
    //return an instance of Row<DataType> containing the appropriate row
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...