écriture de la fonction de membre modèle sur le type de conteneur en dehors d’une classe de modèle

J’ai une classe de modèle où j’essaye de définir une fonction membre en dehors de la définition de classe comme suit:

class traits { typedef std::vector container_t; ...other typedefs// }; template  class Foo { typedef typename traits::container_t container_t // where container_t = std::vector  // member function to be templatized over container type void Initialize (container_t&); private: container_t temp; //temp is of type std::vector }; template  void Foo ::Initialize (T& data) { fill the data } 

Je veux que la fonction Initialize prenne le type de conteneur de type template – conteneur_t, où conteneur_t pourrait être std :: vector ou std :: set et ainsi de suite.

Mais je reçois une erreur de compilation en tant que

“prototype pour initialiser (T &) ne correspond à aucun de la classe Foo” “candidat est initialiser (conteneur_t &)” …

Est-ce que cela résout votre problème?

 template  void Foo::Initialize( typename traits::container_t& t ) { // code } 
 template  // vvvvvv ^^ mismatch!!! void Foo ::Initialize (T& data) { fill the data } 

L’argument de modèle et l’argument transmis au modèle de classe ne sont pas les mêmes. Vous devez résoudre ce problème. En outre, je vous recommande de ne pas nommer l’argument de modèle avec le même nom et la même orthographe que le type qui sera utilisé ultérieurement à cet endroit, car cela entraînerait souvent de la confusion. Vous pouvez simplement changer la capitalisation:

 class traits { … }; template  class Foo { … };