Bonjour
J'ai une question à laquelle je n'arrive pas à trouver de solution : j'ai une fonction template que je voudrais spécialiser pour une instance d'une classe template.
Un exemple valant mieux qu'un long discourt, voici mon cas. J'ai la classe templatisée suivante :
Code :
- template<class T>
- class Size
- {
- public :
- T width;
- T height;
- };
|
Ainsi que la fonction template suivante :
Code :
- template<class T>
- bool IsEqual(const T & a, const T & b)
- {
- return (a == b);
- }
|
Bien évidemment, il y a eut des spécialisations pour cette méthode (notamment pour les cas des doubles).
L'idée serait de spécialiser IsEqual avec la class Size, histoire d'avoir un code similaire à ça :
Code :
- template<class T>
- bool IsEqual(const Size<T> & a, const Size<T> & b)
- {
- return IsEqual<T>(a.width, b.width) && IsEqual<T>(a.height, b.height);
- }
|
Bien évidemment, ça ne marche pas (sinon je ne posterais pas là ^^)... pour spécialiser, il faut que je spécifie "template<>" j'ai beau cherché, je ne trouve pas de solutions Enfin si, j'ai une solution, mais qui ne me convient pas vraiment (elle a le mérite de marcher au moins) : c'est de surdéfinir l'opérateur == de Size :
Code :
- inline bool operator==( const Size & size ) const
- {
- return ivs::IsEqual<T>(width, size.width) && ivs::IsEqual<T>(height, size.height);
- }
|
(c'est ce que je fais pour le moment, faute de mieux)
Auriez vous une idée de réaliser la chose ? Un grand merci par avance