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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] template et condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] template et condition

n°258844
bb138
La vie est belle ...
Posté le 02-12-2002 à 13:25:04  profilanswer
 

Ma question est peut-être un peu farfelue mais bon j'essaye tout de même :
 
Je souhaiterais faire un template sur une classe contenant au moins une fonction qui retourne un double si lors de la création d'une entité de la classe j'ai choisi ce type et retourne un float pour tous les autres types...
 
Je ne sais pas si c'est faisable mais il faudrait à mon avis faire un test sur le type passé en paramètre et instencier la bonne fonction...

mood
Publicité
Posté le 02-12-2002 à 13:25:04  profilanswer
 

n°259105
pascal_
Posté le 02-12-2002 à 17:16:29  profilanswer
 

Simple : le retour de la fonction est un template.
Regarde les tonnes d'exemple dans la doc.

n°259252
kenshiro18​2
Posté le 02-12-2002 à 21:28:56  profilanswer
 

Bon, j'ai jamais utilisé la spécialisation de template, mais ton message m'a donné l'envie irrésisble d'essayer :-)
 
 

Code :
  1. #include <iostream>
  2. template <class T>
  3. class Base
  4. {
  5. public:
  6.   Base(int n):m_Number(n){}
  7.   int DoIt(){ return m_Number/3; }
  8. private:
  9.   int m_Number;
  10. };
  11. template<> class Base<float>
  12. {
  13. public:
  14.   Base(int n):m_Number(n){}
  15.   float DoIt(){ return m_Number/3.f; }
  16. private:
  17.   int m_Number;
  18. };
  19. int main()
  20. {
  21.   std::cout << Base<int>(4).DoIt() << std::endl;
  22.   std::cout << Base<float>(4).DoIt() << std::endl;
  23. }

 
 
Si tu veux  éviter de dupliquer le code (constructeur, autres fonctions membres), tu peux toujours faire une classe template de base, puis faire une classe template fille qui elle sera spécialisée.
 

Code :
  1. template <class T> Base{};
  2. template <class T> Fille:public Base<T>{};
  3. template <> Fille<double>:public Base<double>{};

n°259459
Musaran
Cerveaulté
Posté le 03-12-2002 à 03:05:13  profilanswer
 

Solution 1: Spécialiser pour le type double.
Pour éviter de dupliquer le code commun, il faut le placer dans une classe de base, éventuellement patron.

Code :
  1. template <typename T>
  2. class Base{
  3. //partie commune
  4. };
  5. //patron pour tout type
  6. template<typename T>
  7. class MaClasse:public Base<T>{public:
  8. float DoIt(){ return 0; }
  9. };
  10. //spécialisation du patron pour double
  11. class MaClasse<double>:public Base<double>{public:
  12. double DoIt(){ return 0; }
  13. };


 
Solution 2: Reporter la spécialisation dans la fonction, qui doit être un objet-fonction.
Le code n'est pas dupliqué, mais la fonction n'est plus une méthode et n'accède plus aux membres.

Code :
  1. //patron d'objet fonction
  2. template <typename T>
  3. class DoItClass{public:
  4. float operator()(){ return 0; }
  5. };
  6. //spécialisation
  7. class DoItClass<double>{public:
  8. double operator()(){ return 0; }
  9. };
  10. template<typename T>
  11. class MaClasse{public:
  12. DoItClass<T> DoIt; //objet fonction
  13. };


 
Code de test commun aux deux:

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. cout << typeid( MaClasse<int   >().DoIt() ).name() << endl;
  5. cout << typeid( MaClasse<double>().DoIt() ).name() << endl;
  6. return 0;
  7. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

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

  [C++] template et condition

 

Sujets relatifs
[C/C++] template: j'ai merdé, help siouplaitcondition particuliere...
Comment faire une condition doubleQu'est ce que des template ???
IntelliJ Idea, comment on change les Class Template ?[PHP] Optimisation pour un template
[PHP] Générer une condition ifMRTG template
Problème de requête SQL avec condition "Where" en vb...[ACCESS] macro - syntaxe condition
Plus de sujets relatifs à : [C++] template et condition


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