Paramètre par défaut d'une methode/fonction template
Bonjour.
J'ai une déclaration de méthode que j'aimerai faire ressembler à cela :
Code:
1 2 3 4 5 6 7 8 9 10
|
template<...>
class Toto
{
char foo[3] = {1, 2, 3};
int bar[3] = {42, 12, 3012};
template <typename T>
void foobar(T* a, T* b = ???);
}; |
Je souhaite initialiser b avec tantôt foo si T est un char tantôt bar si T est un int.
Ma question est donc comment faire ?
Puis-je écrire dans le point h :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
template<...>
class Toto
{
char foo[3] = {1, 2, 3};
int bar[3] = {42, 12, 3012};
void foobar(char* a, char* b = foo);
void foobar(int* a, int* b = bar);
}; |
et dans le point cc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
// specialisation classe template 1
template<> template <typename T>
void Toto::foobar(T* a, T* b)
{
// implementation identique pour les deux template de methode
}
// specialisation classe template 2
template<> template <typename T>
void Toto::foobar(T* a, T* b)
{
// implementation identique pour les deux template de methode
} |
Sachant que je n'ai que deux types. La déclaration ne se ferait donc que deux fois. Par contre comme la méthode est dans une classe template, elle est spécialisée pour 4 ou 5 types (de la classe). Je n'ai pas besoin de en plus réécrire les methodes pour chacun de ses template.
Merci pour votre aide.