Ik heb les
template<size_t N, size_t M>
class Matrix {
// ....
};
Ik wil een typedef
maken die een Vector
(kolomvector) maakt die equivalent is aan een Matrix
met 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>::type
gelijk aan Matrix<3, 1>
.