A priori ce que je vais demander fonctionne avec g++, mais je me demande si c'est bien légal, puisque je ne l'ai vu expliqué nul part.
Soit un model de classe C<T> possédant des fonctions membres, est il possible de spécialiser, certaines de ses fonctions membres, seulement dans leur définition?
Un petit exemple descriptif:
Code C.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template <typename T> class C { void test(); } #include "C.tpp"
Code C.tpp : 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<typename T> void C<T>::test() { ... } template<> void C<double>::test() { ... } template<> void C<float>::test() { ... }
Ainsi avec une utilisation:
ce sera la spécialisation C<double>::test qui sera utilisée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 C<double> t; //t::test(); edité t.test();
Ce que j'ai compris dans ce genre de cas, c'est qu'il faut déclarer entièrement les models C<double> et C<float>. Est-ce vraiment ce que dit la norme?
Partager