Bonjour,
Voila, j'utilise une classe Matrix pour faire du calcul matriciel. C'est une classe templatisé, de sorte que le type des valeurs mais aussi les dimensions de la matrice sont fixés à la compilation. Comme ceci:
Code :
- template<class _T, int _WIDTH, int _HEIGHT>
- class Matrix
|
C'est extrêmement utile pour s'assurer lors de la compilation que les dimensions de deux matrices sont compatibles lors d'une multiplication (bien entendu, via des opérateurs surchargés, comme ceci :
Code :
- template<int _RHSWIDTH>
- Matrix<_T, _RHSWIDTH, _HEIGHT> operator * (const Matrix<_T, _RHSWIDTH, _WIDTH> &rhs) const;
|
Jusque la tout va bien. La on ça se corse c'est que je veux aussi pouvoir écrire:
Lorsque x et c sont des scalaires, et lorsque (et uniquement lorsque) M est une matrice ligne, A est une matrice colonne, et donc M*A est un scalaire.
Avec le operator* décrit au dessus, le compilateur produit une matrice de taille 1x1 contenant le scalaire, et pas le scalaire.
Du coup j'ai trouvé une astuce en surchargeant l'opérateur de cast de cette manière:
Code :
- operator _T() { return element[0]; }
|
Et la tout fonctionne, puisque le compilateur cast correctement la matrice 1,1 en _T automatiquement. Mais ça me plait pas trop car je suis pas a 100% sûr que ce cast ne s'effectuera que dans ce cas précis d'une matrice 1x1. J'aimerais donc que cette fonction ne soit active que dans la version 1x1 du code, pour que cette vérification se passe lors de la compilation.
Est-ce possible ? et si oui comment? Merci