Ich mache eine Basisklasse und abgeleitete Klasse. Die abgeleitete Klasse enthält einen Wert von Eigen::Matrix<T,int,int>
und erbt alle Methoden von Base.Klassenmitglied vom Typ Eigen :: MatrixBase <derived> in einer Klasse? Was ist "abgeleitet"?
Ich mache das so, dass die Methoden, die unabhängig vom Matrixtyp gleich sind, nicht alle wegen unterschiedlicher Matrizenargumente für Matrix wiederholt werden. Während diese Methoden in der Basisklasse auf einer MatrixBase ausgeführt werden können, kann ich keinen Typ von MatrixBase als Mitglied meiner Base-Klasse haben, da hierfür ein "abgeleiteter" Template-Arg benötigt wird.
Worauf bezieht sich "abgeleitet"?
Dokumentation sagt:
Abgeleitet ist der abgeleiteten Typ, beispielsweise ein Matrixtyp oder ein Ausdruck
Ich bin nicht sicher, was das bedeutet. Gibt es eine Instanz von "abgeleitet", die ich als Typ für MatrixBase ausfüllen kann?
Ich verstehe nicht, was Sie hier eigentlich erreichen wollen. Wenn "Base" Zugriff auf die Matrix haben soll, machen Sie "Base" selbst zu einem Template und setzen Sie die Matrix dort ein. Aber zeigen Sie wahrscheinlich ein kurzes Beispiel dafür, was "Base" und was "Derived" in Ihrem Fall aussehen soll. – chtz
Dies ist das Grundprinzip von CRTP (seltsam wiederkehrendes Template-Muster), das Eigen folgt, in dem "MatrixBase" eine abstrakte Klasse ist. Alle Eigenmatrizen und Ausdrücke erben davon, indem sie 'MatrixBase' verwenden, wobei 'Derived' beispielsweise Ihre' Eigen :: Matrix 'oder ein Ausdruck sein könnte, der' Eigen :: Matrix 'beinhaltet. –
romeric
Sie haben gesagt, dass Sie keine MatrixBase als Mitglied Ihrer Basisklasse benötigen. Verwenden Sie einfach 'Matrix' als Mitglied und machen Sie Ihre Basis-Klasse Funktionen Vorlagen, so dass sie akzeptieren 'const MatrixBase & 'als Eingabe-Argument. Dies funktioniert für jeden generischen Eigenausdruck, einschließlich Matrizen verschiedener Datentypen. –
romeric