web-dev-qa-db-ger.com

C ++ Template typedef

Ich habe ein klasse

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

Ich möchte ein typedef erstellen, das einen Vector (Spaltenvektor) erzeugt, der einem Matrix mit den Größen N und 1 entspricht.

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

Welches erzeugt Kompilierungsfehler. Folgendes erzeugt etwas Ähnliches, aber nicht genau das, was ich will:

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

Gibt es eine Lösung oder eine nicht zu teure Problemumgehung/Best Practice dafür?

346
Notinlist

C++ 11 fügte Alias-Deklarationen hinzu, die die Verallgemeinerung von typedef sind und Vorlagen erlauben:

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

Der Typ Vector<3> ist äquivalent zu Matrix<3, 1>.


In C++ 03 war die nächste Annäherung:

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

Hier ist der Typ Vector<3>::type ist äquivalent zu Matrix<3, 1>.

518
GManNickG