une - template c++




Comment définir une fonction membre de modèle d'une classe de modèle (2)

Duplication possible:
Comment définir une fonction de modèle dans une classe de modèle en dehors de la définition de classe?

Je suis aux prises avec la syntaxe du cas où j'ai une fonction membre de template dans une classe de template:

template <typename T> class Foo
{
    void Bar(const T * t);
    template <typename T2> void Bar(const T2 * t);
};

template <typename T> void Foo<T>::Bar(const T * t)
{
    // ... no problem ...
}

template <typename T> void Foo<T>::Bar<typename T2>(const T2 * t)
{
    // ... this is where I'm tearing my hair out ...
}

La fonction du premier membre est correcte, mais la fonction de membre du modèle qui gère les types autres que le type de base de la classe de modèle est l'endroit où j'ai des problèmes. Pour le cas ci-dessus, j'obtiens les erreurs suivantes:

template_problem.cpp:12: error: parse error in template argument list
template_problem.cpp:12: error: expected ‘,’ or ‘...’ before ‘*’ token
template_problem.cpp:12: error: ISO C++ forbids declaration of ‘T2’ with no type
template_problem.cpp:12: error: template-id ‘Bar<<expression error> >’ in declaration of primary template
template_problem.cpp:12: error: prototype for ‘void Foo<T>::Bar(int)’ does not match any in class ‘Foo<T>’
template_problem.cpp:4: error: candidates are: template<class T> template<class T2> void Foo::Bar(const T2*)
template_problem.cpp:7: error:                 void Foo<T>::Bar(const T*)
template_problem.cpp:12: error: template definition of non-template ‘void Foo<T>::Bar(int)’

et j'ai également essayé toutes les autres variations de syntaxe auxquelles je peux penser pour la version modèle de Bar .


template <typename T>
    template <typename T2> 
    void Foo<T>::Bar(const T2 * t) {
    // ... this is where I'm tearing my hair out ...
}

La laideur n'est pas ça.


template<typename T>
template<typename T2>
void Foo<T>::Bar(const T2* t) 
{
     // stop tearing your hair out
}




templates