Bonjour.

J'ai une déclaration de méthode que j'aimerai faire ressembler à cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.