Problème de spécialisation de fonction template membre
Problème de spécialisation de fonction template membre
Bonjour à tous.
Je dispose du code suivant:
Code:
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);
}
}; |
Avec cette fonction , je veux pouvoir ajouter des objets de type B et C.
Sauf que si l'objet est de type B, la fonction ne doit rien renvoyer.
J'ai donc écris:
Code:
1 2 3 4 5 6 7 8 9
| class C //...
{
//..
template <> void Add(B* t)
{
m_liste.push_back(t);
}
//...
}; |
Mais dans ce cas, gcc me dit que la spécialisation doit avoir lieu dans le namespace qui contient C.
Citation:
explicit specialization in non-namespace scope ‘class C’
Pas de problème :
on met la fonction membre dans le namespace globale
:
Code:
1 2 3 4 5
|
template <> void C::Add<B>(B* t)
{
m_liste.push_back(t);
} |
mais la GCC me dit :
Citation:
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*)
Et si j'ajoute le 'prototype' de la spécialisation dans la classe,j'ai la 1er erreure en plus des précédantes.
Une idée ?
Merci.