Je crée une classe de base et une classe dérivée. La classe dérivée contiendra une valeur de Eigen::Matrix<T,int,int>
et héritera de toutes les méthodes de Base. Je le fais de sorte que les méthodes, qui sont les mêmes quel que soit le type de matrice, ne sont pas toutes répétées en raison de la différence des arguments de matrice pour Matrix. Bien que ces méthodes dans la classe de base puissent être effectuées sur une MatrixBase, je ne suis pas en mesure d'avoir un type de MatrixBase en tant que membre de ma classe de base, car il nécessite un argument de type "derived".Membre de la classe Eigen :: MatrixBase <derived> dans une classe? Qu'est-ce qui est "dérivé"?
Que signifie "dérivé"?
Documentation dit:
est dérivé du type dérivé, par exemple, un type de matrice ou une expression
Je ne suis pas sûr de ce que cela signifie. Y a-t-il une instance de "derived" que je peux remplir en tant que type pour MatrixBase?
Je ne comprends pas ce que vous voulez vraiment réaliser ici. Si 'Base' doit avoir accès à la matrice, faites Base lui-même et insérez-y la matrice. Mais montrez probablement un court exemple de ce à quoi 'Base' et' Derived' sont supposés ressembler dans votre cas. – chtz
Ceci est le principe de base de CRTP (modèle de modèle curieusement récurrent) qu'engine l'eigen, en ce sens que 'MatrixBase' est une classe abstraite. Toutes les matrices et expressions propres héritent de cela en utilisant 'MatrixBase' où 'Derived' pourrait être votre' Eigen :: Matrix 'par exemple, ou une expression impliquant' Eigen :: Matrix '. –
romeric
Après avoir dit que vous n'avez pas besoin d'avoir un 'MatrixBase' en tant que membre de votre classe de base. Il suffit d'utiliser 'Matrix' comme membre et de créer des fonctions de classe Base de sorte qu'elles acceptent 'const MatrixBase &' comme argument d'entrée. Cela fonctionnera pour toute expression propre générique incluant les matrices de différents types de données. –
romeric