2016-12-21 3 views
1

У меня есть класс матрицы и класс столбца внутри него:Как определение типа во внутренний класс

template<class T> 
struct MatrixT 
{ 
    template<class T> 
    struct ColumnT 
    { 
    }; 
}; 

Обратите внимание, что ColumnT всегда будет держать один и тот же тип как MatrixT.

Для удобства я определяю

typedef MatrixT<double> matrix; 

Так как в действительности, я буду использовать double элемент большую часть времени. Но я также хочу определить что-то подобное для класса columnT. Я попытался

typedef MatrixT<double>::ColumnT<double> matrix::column; 

но компиляция завершается с ошибкой

ошибки - квалифицированное имя не допускается

Есть ли способ достичь чего я хочу?

Я хотел бы иметь возможность вводить matrix::column c; так же, как я могу типа matrix m;

+0

Вы попробовали 'MatrixT :: ColumnT' параметр T может быть затенен, поскольку оба шаблона используют один и тот же заполнитель для типа. попробуйте разные имена для T, а также –

+1

похоже, что вы хотите, чтобы параметр шаблона 'T' всегда был одного и того же типа в' MatrixT' и 'ColumnT'. Если это так, jst избавится от этого второго шаблона 'и он должен работать нормально. –

ответ

2

Просто удалите второй template<class T>

template<class T> 
struct MatrixT 
{ 
    struct ColumnT 
    { 
    }; 
}; 

ColumnT следует затем использовать тот же тип MatrixT, и ваш ЬурейеЕ ...

typedef MatrixT<double> matrix; 

... должно работать так, как вы ожидаете. T о.

Смежные вопросы