Angenommen, ich habe die folgende Matrizenschablonenklasse und es ist erforderlich, den Vektor entweder als 1 x RowSize- oder ColSize x 1-Matrix darzustellen (damit ich viele mit Vektoren kompatible Matrixoperatoren wiederverwenden kann: Multiplikation von 2 Matrizen, Matrix mit einem skalare usw.) multipliziert:Teilspezialisierung und SFINAE
template <class T, size_t ColumnSize, size_t RowSize>
struct Matrix {
T [ColumnSize][RowSize];
}
ich habe zwei Fragen:
1) Wenn ich mich nicht täusche ich, dass entweder durch partielle Spezialisierung oder mit SFINAE (zum Beispiel auf Matrix Methoden erreichen kann Aktivieren der Methode 'length', wenn entweder ColSize oder RowSize 1) ist. Was sind die Vor- und Nachteile der genannten Optionen?
2) Wenn ich mit der teilweisen Spezialisierung, wählen zu gehen ist es eine Möglichkeit, eine Spezialisierung für beide Zeilen- und Spaltenvektoren, statt diese zu definieren:
template <class T, size_t ColumnSize>
struct Matrix<T, ColumnSize, 1> {
T length() const;
T [ColumnSize][RowSize];
}
template <class T, size_t RowSize>
struct Matrix<T, 1, RowSize> {
T length() const;
T [ColumnSize][RowSize];
}
sollten Sie mehr Kontext geben, sonst ist Ihre Frage "meinungsbasiert". –
Wenn Sie nach Abstrichen und Vorteilen von beiden gefragt haben, denke ich, dass das besser wäre, da das leichter objektiv zu beantworten ist. –
Empfehlung: Sie können die Parameter als 'Vorlage Klasse Matrix' mit 'enum Klasse Vektororientierung {Spaltenvektor, Zeilenvektor};' definieren. Dann würde es keine Zweideutigkeit geben, denke ich. –