Bonjour,
Je suis en train de redesigner une partie de mon code. Pour l'instant j'ai :
Le cross product n'est défini que pour les vecteurs en 3D. Ce que j'aimerais faire, c'est déplacer quand même l'opérateur dans la classe, de cette facon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template <typename REAL, unsigned D> class Vector { REAL m_data[D]; }; ///Cross product template<typename REAL> Vector<REAL,3> operator ^(const Vector<REAL,3>& p_v1, const Vector<REAL,3>& p_v2);
Le but est de faire un genre de spécialisation de template, et d'avoir une erreur de linkage si quelqu'un essaie de faire un crossproduct sur des Vectors a autre chose que 3D.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template <typename REAL, unsigned D> class Vector { REAL m_data[D]; public: Vector<REAL,D> operator ^(const Vector<REAL,D>& p_vect); }; ///Cross product template<typename REAL> Vector<REAL,3> Vector<REAL,3>::operator ^(const Vector<REAL,3>& p_vect) { ... } ///Voir même éventuellement si besoin template<typename REAL> Vector<REAL,2> Vector<REAL,2>::operator ^(const Vector<REAL,2>& p_vect) { ... }
L'erreur que j'ai c'est "Invalid use of incomplete type Vector<float, 3u>" (g++). Je ne comprend pas vraiment le message, la définition de la classe est extérieure à la classe, il devrait normalement avoir ce qu'il lui faut pour instancier le template.
Est ce possible de faire une spécialisation partielle d'un membre d'une classe ? Si oui comment, et sinon pourquoi pas ?
Partager