web-dev-qa-db-fra.com

C ++ template typedef

J'ai un cours

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

Je veux créer un typedef qui crée un Vector (vecteur de colonne) qui équivaut à un Matrix de taille N et 1. Quelque chose comme ça:

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

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

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

Existe-t-il une solution ou une solution de contournement pas trop coûteuse/une meilleure pratique pour cela?

346
Notinlist

C++ 11 ajouté déclarations d'alias, qui sont la généralisation de typedef, autorisant les modèles:

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

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


En 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>.

518
GManNickG