С++ шаблон typedef

У меня есть класс

template<size_t N, size_t M>
class Matrix {
    // ....
};

Я хочу сделать typedef который создает Vector (вектор-столбец), который эквивалентен Matrix с размерами N и 1. Что-то вроде этого:

typedef Matrix<N,1> Vector<N>;

Что приводит к ошибке компиляции. Следующее создает нечто подобное, но не совсем то, что я хочу:

template <size_t N>
class Vector: public Matrix<N,1>
{ };

Есть ли решение или не слишком дорогой обходной путь/лучшие практики для него?

Ответ 1

С++ 11 добавлены псевдонимы, которые являются обобщением typedef, позволяя шаблонам:

template <size_t N>
using Vector = Matrix<N, 1>;

Тип Vector<3> эквивалентен Matrix<3, 1>.


В С++ 03 наиболее близким приближением было:

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};

Здесь тип Vector<3>::type эквивалентен Matrix<3, 1>.