Bonjour,
j'ai de petits soucis avec la spécialisation d'une fonction membre ; la seule solution que j'ai trouvée étant pour l'instant de la déclarer toujours en inline (VC++ 2005).
Exemple:Cette spécialisation doit-elle alors toujours être inline ?
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
32
33
34
35 #pragma once #ifndef __TTESTTEMPLATE__ #define __TTESTTEMPLATE__ class TTestTemplate { public: template<typename T> int FnctMembre(T t) { return 1; } // Passe en VC++, mais pas vraiment légal en C++ il me semble template<> int FnctMembre<int>(int t) { return 2; } }; /* Problème à l'édition des liens (la fonction se trouve déclaré dans plusieurs modules) template<> int TTestTemplate::FnctMembre<char>(char t) { return 3; } */ template<> inline int TTestTemplate::FnctMembre<double>(double t) { return 4; } #endif //__TTESTTEMPLATE__
Remarque : il m'est déjà arrivé de placer des spécialisations dans un cpp, en ne donnant pas l'implémentation par défaut.Mais cela force à ne pas donner l'implémentation par défaut, sinon elle sera utilisée pour générer une spécialisation et entrera en conflit l'autre (de plus je ne suis pas très sur de la légalité d'un tel code ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // .h class TTestTemplate { public: template<typename T> int FnctMembre(T t); // échoue si il n'existe pas une spécialisation adéquate }; // .cpp template<> int TTestTemplate::FnctMembre<char>(char t) { return 1; }
Partager