Инициализация шаблона: - PullRequest
       12

Инициализация шаблона:

1 голос
/ 22 февраля 2020

Я хочу создать псевдоним вектора строки и вектора столбца из класса Matrix. Как я могу это сделать?

template<class T, unsigned int m, unsigned int n>
class Matrix {
public:
    Matrix();

    .
    .
    .

private:
    unsigned int rows;
    unsigned int cols;
    .
};

Я получаю ошибку здесь. Я вижу, что псевдоним типа для шаблонов не может быть сделано. Есть ли способ, которым я могу справиться с этим? Ниже я получаю сообщение об ошибке «Частичная специализация шаблона псевдонима».

template<class T, unsigned int m, unsigned int n>
using rowVector<T,n> = Matrix<T,1,n>;

template<class T, unsigned int m, unsigned int n>
using colVector<T,m> = Matrix<T,m,1>;

Любые указатели, как я могу добиться этого?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2020

Это правильный синтаксис:

template <class T, unsigned int n>
using rowVector = Matrix<T, 1, n>;

template <class T, unsigned int m>
using colVector = Matrix<T, m, 1>;
1 голос
/ 22 февраля 2020

Я считаю, что у вас должно быть больше кода, чем вы опубликовали, потому что это

template<class T, unsigned int m, unsigned int n>
class Matrix {};

template<class T, unsigned int m, unsigned int n>
using rowVector<T,n> = Matrix<T,1,n>;

template<class T, unsigned int m, unsigned int n>
using colVector<T,m> = Matrix<T,m,1>;

Вызывает следующую ошибку

prog.cc:5:16: error: expected '=' before '<' token
 using rowVector<T,n> = Matrix<T,1,n>;
                ^
prog.cc:5:16: error: expected type-specifier before '<' token
prog.cc:8:16: error: expected '=' before '<' token
 using colVector<T,m> = Matrix<T,m,1>;
                ^
prog.cc:8:16: error: expected type-specifier before '<' token

Правильный синтаксис для шаблона псевдонима это:

template < template-parameter-list >
using identifier attr(optional) = type-id ;

Итак, исправление

template<class T, unsigned int m, unsigned int n>
using rowVector = Matrix<T,1,n>;

template<class T, unsigned int m, unsigned int n>
using colVector = Matrix<T,m,1>;

И я полагаю, вы хотите удалить m как параметр rowVector и n как параметр colVector:

template<class T, unsigned int n>
using rowVector = Matrix<T,1,n>;

template<class T, unsigned int m>
using colVector = Matrix<T,m,1>;
...