Bonjour,
J'ai une question pour les fans de templates, mais tout d'abord, voici le code qui illustrera la question :
J'ai donc une classe qui a deux paramètres templates. Dans cette classe, la méthode g() a un comportement spécifique en fonction du premier paramètre, indépendemment du second.
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
31 #include <iostream> #include <string> template<typename T1, typename T2> class A { public: void f(); template <typename T3> void g(); }; template< typename T1, typename T2 > void A<T1, T2>::f() { g<T1>(); } // spécialisation pour T1 = int template< typename T1, typename T2 > template<> void A<T1, T2>::g<int>() { std::cout << 24 << std::endl; } int main() { A<int, std::string> a; a.f(); return 0; }
J'avais tout d'abord pensé à spécialiser partiellement la méthode avec un truc du genre ;
mais ce n'est pas autorisé. Alors j'ai écrit le code placé plus haut, en me disant que j'allais paramétrer la méthode g() pour ensuite la spécialiser ; mais là encore, le compilateur fait la tête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<typename T2> void A<int, T2>::g() { ... }
Je crois comprendre qu'il ne veut pas que je spécialise une méthode d'une classe template si je ne spécialise pas la classe elle-même.Envoyé par g++
Alors maintenant je suis un peu à court d'idées, je m'en remet donc à vous. Avez-vous une idée pour m'aider à obtenir ce que je veux ?
Merci
Partager