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 :
- template <typename T>
- class Base{
- //partie commune
- };
- //patron pour tout type
- template<typename T>
- class MaClasse:public Base<T>{public:
- float DoIt(){ return 0; }
- };
- //spécialisation du patron pour double
- class MaClasse<double>:public Base<double>{public:
- double DoIt(){ return 0; }
- };
|
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 :
- //patron d'objet fonction
- template <typename T>
- class DoItClass{public:
- float operator()(){ return 0; }
- };
- //spécialisation
- class DoItClass<double>{public:
- double operator()(){ return 0; }
- };
- template<typename T>
- class MaClasse{public:
- DoItClass<T> DoIt; //objet fonction
- };
|
Code de test commun aux deux:
Code :
- #include <iostream>
- using namespace std;
- int main(){
- cout << typeid( MaClasse<int >().DoIt() ).name() << endl;
- cout << typeid( MaClasse<double>().DoIt() ).name() << endl;
- return 0;
- }
|
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone