C++-sjabloon typedef

Ik heb les

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

Ik wil een typedefmaken die een Vector(kolomvector) maakt die equivalent is aan een Matrixmet de maten N en 1. Zoiets:

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

Wat een compileerfout oplevert. Het volgende creëert iets soortgelijks, maar niet precies wat ik wil:

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

Is er een oplossing of een niet al te dure workaround / best-practice voor?


Antwoord 1, autoriteit 100%

C++11 heeft alias-declaratiestoegevoegd, die veralgemeningen zijn van typedef, waardoor sjablonen mogelijk zijn:

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

Het type Vector<3>is gelijk aan Matrix<3, 1>.


In C++03 was de beste benadering:

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

Hier is het type Vector<3>::typegelijk aan Matrix<3, 1>.

Other episodes