Problème de spécialisation de fonction template membre
Bonjour à tous.
Je dispose du code suivant:
Avec cette fonction , je veux pouvoir ajouter des objets de type B et C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class A{ /**/}; class B : public A{ /**/}; class C : public A { /**/ std::vector<A*> m_liste; template <class TYPE> TYPE& Add(TYPE* t) { m_liste.push_back(t); return (*t); } };
Sauf que si l'objet est de type B, la fonction ne doit rien renvoyer.
J'ai donc écris:
Mais dans ce cas, gcc me dit que la spécialisation doit avoir lieu dans le namespace qui contient C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class C //... { //.. template <> void Add(B* t) { m_liste.push_back(t); } //... };
Pas de problème :explicit specialization in non-namespace scope ‘class C’
on met la fonction membre dans le namespace globale
:
mais la GCC me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template <> void C::Add<B>(B* t) { m_liste.push_back(t); }
Et si j'ajoute le 'prototype' de la spécialisation dans la classe,j'ai la 1er erreure en plus des précédantes.error: template-id ‘Add<B>’ in declaration of primary template
error: prototype for ‘void C::Add(B*)’ does not match any in class ‘C’
error: candidate is: template<class TYPE> TYPE& C::Add(TYPE*)
Une idée ?
Merci.
Partager