Template, spécialisation de la définition de fonctions membres
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:
1 2 3 4 5 6 7
| template <typename T>
class C
{
void test();
}
#include "C.tpp" |
Code:
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:
Code:
1 2 3
| C<double> t;
//t::test(); edité
t.test(); |
ce sera la spécialisation C<double>::test qui sera utilisée.
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?