Hello,

Soit un template :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template <typename T>
class MyClass
{
    ...
};
La façon habituelle de restreindre l'instanciation à un nombre données de types (ici, A et B) et de ne pas fournir d'implémentation générique, et de spécialiser pour chaque classe privilégiée :

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
template<>
class MyClass;
 
template<>
class MyClass<A>
{
    ...
};
 
 
template<>
class MyClass<B>
{
    ...
};
Si le code est commun aux deux spécialisations (nonobstant le type fourni en argument template), on se retrouve avec de la duplication de code. Il y a-t-il moyen de faire autrement ?

J'essaye de bidouiller avec C++11, mais je l'impression que ça en va pas être très propre...