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