2010-06-22 3 views
0

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

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

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

И в файле матрицы:

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

Я полагаю, я мог бы попробовать хорошо помещенный EXTERN?

+0

Почему вы пытаясь сделать это, вместо того, чтобы определять один (или оба) этих классов в терминах базового типа данных (например, int, double и т. д.)? В этом случае, где этот тип данных определен/объявлен? – tlayton

+0

Как изменить тип строк и столбцов, чтобы обеспечить разные матрицы? Являются ли типы строк и столбцов, которые меняются, или просто экземпляры? –

ответ

1

Если я правильно понимаю ваш вопрос, вы пытаетесь определить матрицу в качестве шаблона с типом строки и типом столбца, а затем rowType (и я предполагаю также тип столбца) в качестве шаблонов типа матрицы. Мой большой вопрос: где фактические данные? В какой-то момент я предполагаю, что эта матрица должна фактически разбиться на структурированную группу ints, или удваивает, или символы, или обратные итераторы указателей на 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 в класс матрицы, такой как:

template <class DataType> 
Row<DataType> Matrix::getRow(int index){ 
    //return an instance of Row<DataType> containing the appropriate row 
} 
Смежные вопросы