C++ template typedef

j'ai une classe

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

je veux faire un typedef qui crée un Vector (vecteur colonne) qui est équivalent à un Matrix avec les tailles N et 1. Quelque chose comme ça:

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

qui produit une erreur de compilation. Ce qui suit crée quelque chose de similaire, mais pas exactement ce que je veux:

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

Est-il une solution ou une pas trop cher / contournement des meilleures pratiques?

314
demandé sur Benjamin Gruenbaum 2010-05-08 21:40:53

2 réponses

C++11 a ajouté les déclarations d'alias , qui sont la généralisation de typedef , permettant les gabarits:

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

le type Vector<3> est équivalent à Matrix<3, 1> .


dans C++03, l'approximation la plus proche était:

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

ici, le type Vector<3>::type est équivalent à Matrix<3, 1> .

468
répondu GManNickG 2013-01-11 19:28:31

Voici une solution C++0x:

template<size_t N>
class Vector: public Matrix<N,1>{};
-1
répondu Rchn 2018-10-05 15:20:38