Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1865 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  fonction template dans une classe template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction template dans une classe template

n°850244
theShOcKwA​vE
I work at a firm named Koslow
Posté le 14-09-2004 à 21:18:04  profilanswer
 

je me demandais quelle etait la syntaxe pour definir une fonction template au sein d'une classe template
 
sur un exemple simple :
 

Code :
  1. template <typename T> class foo {
  2.   void bar(int i);
  3. }
  4. template <typename T>
  5. void foo<T>::bar(int i){
  6.   // fonction a rendre template (pour rendre le parametre generique)
  7. }


 
je ne vois pas trop :heink:

mood
Publicité
Posté le 14-09-2004 à 21:18:04  profilanswer
 

n°850249
Joel F
Real men use unique_ptr
Posté le 14-09-2004 à 21:22:28  profilanswer
 

c'etait Presque Ca :
 

Code :
  1. template <typename T> class foo
  2. {
  3.   void bar(T i) { // corps de la functino ici };
  4. }


Message édité par Joel F le 14-09-2004 à 21:23:10
n°850257
Taz
bisounours-codeur
Posté le 14-09-2004 à 21:32:14  profilanswer
 

pourquoi "corps de la fonction ici"
 
je crois que ce que tu veux c'est ça
 

Code :
  1. #include <iostream>
  2. template<typename T>
  3. struct Foo
  4. {
  5.   void foo(T);
  6.   template<typename NOT_T>
  7.   void foo(NOT_T);
  8. };
  9. template<typename T>
  10. void Foo<T>::foo(T)
  11. {
  12.   std::cout << "Foo<T>\n";
  13. }
  14. template<typename T>
  15. template<typename NOT_T>
  16. void Foo<T>::foo(NOT_T)
  17. {
  18.   std::cout << "Foo<NOT_T>\n";
  19. }
  20. int main()
  21. {
  22.   Foo<int> f;
  23.   f.foo(3);
  24.   f.foo(3.14);
  25. }


 
 
 

n°850270
Joel F
Real men use unique_ptr
Posté le 14-09-2004 à 21:55:24  profilanswer
 

arf j'avais po compris la question :p

n°850316
theShOcKwA​vE
I work at a firm named Koslow
Posté le 14-09-2004 à 22:23:15  profilanswer
 

Yep, merci Taz :jap:

n°850617
theShOcKwA​vE
I work at a firm named Koslow
Posté le 15-09-2004 à 11:45:18  profilanswer
 

maintenant, extension de la question ^^
 
la specialisation d'un operateur template ...
 
j'ai tente de faire comme suit, mais apparamment ... ce n'es pas vraiment ca :D
 

Code :
  1. #include <iostream>
  2. template<typename T>
  3. struct Foo
  4. {
  5.   void foo(T);
  6.   template<typename NOT_T>
  7.   Foo<T>& operator+=(NOT_T);
  8. };
  9. template<typename T>
  10. void Foo<T>::foo(T)
  11. {
  12.   std::cout << "Foo<T>\n";
  13. }
  14. template<typename T>
  15. template<typename NOT_T>
  16. Foo<T>& Foo<T>::operator +=(NOT_T)
  17. {
  18.   std::cout << "+=<NOT_T>\n";
  19. }
  20. template<typename T>
  21. template<>
  22. Foo<T>& Foo<T>::operator += <int> ()
  23. {
  24.   std::cout << "+=<int>\n";
  25. }
  26. int main()
  27. {
  28.   Foo<int> f;
  29.   f.+=3;
  30.   f.+=3.14;
  31. }

n°850618
Taz
bisounours-codeur
Posté le 15-09-2004 à 11:48:10  profilanswer
 

pour que veux pas avoir un operator+=(int) tout simplement ?
quel besoin tu as de le spécialiser ?

n°850626
Taz
bisounours-codeur
Posté le 15-09-2004 à 11:54:33  profilanswer
 

ce que je voulais dire c'est que de toutes façons, la spécialisation partielle, c'est que pour les classes

n°850857
theShOcKwA​vE
I work at a firm named Koslow
Posté le 15-09-2004 à 16:37:01  profilanswer
 

ok, tant pis :/ je peux faire autrementm c'est sur, mais ca me semblait plus coherent de le faire avec un operateur specialise :D
 
Merci quand meme
 
(Edit : pour la raison en fait, il s'agissait d'un operateur sur une classe matrice [projet scolaire inside] et je voulais simplement faire un operateur template pour la multiplication [traiter les cas ou on multiplie par une matrice differemment de ceux ou on multiplie par une valeur quelconque])


Message édité par theShOcKwAvE le 15-09-2004 à 16:42:00
n°850881
Taz
bisounours-codeur
Posté le 15-09-2004 à 17:10:46  profilanswer
 

pourquoi template ?

mood
Publicité
Posté le 15-09-2004 à 17:10:46  profilanswer
 

n°851303
Joel F
Real men use unique_ptr
Posté le 15-09-2004 à 23:34:11  profilanswer
 

theShOcKwAvE a écrit :

pour la raison en fait, il s'agissait d'un operateur sur une classe matrice [projet scolaire inside] et je voulais simplement faire un operateur template pour la multiplication [traiter les cas ou on multiplie par une matrice differemment de ceux ou on multiplie par une valeur quelconque


 
une surcharge simple suffit
 
operator*(const Matrice& m1, const Matrice& m2)
 
operator*(const Matrice& m1, double d)

n°851320
Taz
bisounours-codeur
Posté le 15-09-2004 à 23:51:01  profilanswer
 

faut commencer par *= bordel :o

n°851535
theShOcKwA​vE
I work at a firm named Koslow
Posté le 16-09-2004 à 11:03:19  profilanswer
 

peut-on rendre la surcharge template elle-meme ? Je ne crois pas ...
Je ne vais pas prevoir tous les types par lesquels on pourrait faire une multiplication ... surtout si on supose que l'utilisateur pourra avoir redefini ses propres classes a gerer dans des matrices ...
 
en fait, j'aurais simplement voulu geerer independamment les cas suivants :
 

Code :
  1. Matrice<T1>::operator *=(const Matrice<T2> & );
  2. Matrice<T1>::operator *=(const T2 & );


n°851784
Joel F
Real men use unique_ptr
Posté le 16-09-2004 à 15:26:36  profilanswer
 

Sauf que Matrice<T2> c'est aussi un type est donc le compilo va utiliser le *=(const T2& ) [:le kneu]

n°852098
theShOcKwA​vE
I work at a firm named Koslow
Posté le 16-09-2004 à 20:53:41  profilanswer
 

Joel F a écrit :

Sauf que Matrice<T2> c'est aussi un type est donc le compilo va utiliser le *=(const T2& ) [:le kneu]


 
C'est bien là le problème :o
 
mais je m'en approchais doucement avec des questions simples au début :D


Message édité par theShOcKwAvE le 16-09-2004 à 20:54:13
n°852198
Joel F
Real men use unique_ptr
Posté le 16-09-2004 à 22:50:18  profilanswer
 

ecoute, je bosse sur une librairie matricielle depuis 1 an et demi et je peut te dire que tu n'as pas d'autre solutino que specialiser pr chaque type POD ...

n°852460
theShOcKwA​vE
I work at a firm named Koslow
Posté le 17-09-2004 à 11:06:41  profilanswer
 

okok, je laisse tomber, alors :D

n°852463
Joel F
Real men use unique_ptr
Posté le 17-09-2004 à 11:16:10  profilanswer
 

nah, si tu trouves une soluce tiens moi au courant :p


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  fonction template dans une classe template

 

Sujets relatifs
Appel à une fonction C++ à partir du fortranclasse PHP pour Jabberd2
Recherche une fonction [Réglé]Pointeur de fonction en paramètre
Fonction extract : portée ?Délai avant fonction cache()
fonction is_dir() qui buginput submit, onclick, fonction ???
Une classe qui me pose probleme[perl] Extraction de l'heure sur la fonction Localtime
Plus de sujets relatifs à : fonction template dans une classe template


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR