Bonjour.
J'ai une déclaration de méthode que j'aimerai faire ressembler à cela :
Je souhaite initialiser b avec tantôt foo si T est un char tantôt bar si T est un int.
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 = ???); };
Ma question est donc comment faire ?
Puis-je écrire dans le point h :
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 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); };
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.
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 }
Merci pour votre aide.
Partager