Bonjour,
Je part d'une classe template avec 2 arguments template. Je souhaite spécialiser une des méthodes sur un seul de deux arguments. Echec
Voici mon code:
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
19
20
21
22
23
24
25
 
template< class A, class B>
class T
{
public:
   void MaFonction()
   {
      std::cout<<"?,?"<<std::endl;
   }
};
// cette spécialisation fonctionne
template<>
void
T<int,int>::MaFonction()
{
   std::cout<<"int,int"<<std::endl;
}
 
// celle-ci ne compile pas
template<class B>
void
T<int,B>::MaFonction()
{
   std::cout<<"int,?"<<std::endl;
}
Je suis obligé de spécialiser partiellement toute la classe
Le code suivant ne pose pas de problème:
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
19
20
21
22
23
24
25
26
27
28
29
30
 
template< class A, class B>
class T
{
public:
   void MaFonction()
   {
      std::cout<<"?,?"<<std::endl;
   }
};
 
template<class B>
class T<int,B>
{
public:
   void MaFonction()
   {
      std::cout<<"int,?"<<std::endl;
   }
};
 
template<>
class T<int,int>
{
public:
   void MaFonction()
   {
      std::cout<<"int,int"<<std::endl;
   }
};
Je n'ai rien trouvé sur la spécialisation partielle de méthodes. En général, les docs parlent de spécialisation partielle pour les classes et de spécialisation (tout court) pour les méthodes. Une idée?