185 votes

Comment créer une fonction modèle dans une classe ? (C++)

Je sais qu'il est possible de créer une fonction de modèle :

template<typename T>
void DoSomeThing(T x){}

et il est possible de créer une classe modèle :

template<typename T>
class Object
{
public:
    int x;
};

mais est-il possible de créer une classe qui n'est pas un modèle, puis de faire d'une fonction de cette classe un modèle ? Par exemple :

//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
    template<class T>
    void DoX(){}
};

ou quelque chose dans ce sens, où la classe ne fait pas partie d'un modèle, mais la fonction oui ?

144voto

Not Sure Points 3128

Votre hypothèse est la bonne. La seule chose dont vous devez vous souvenir est que le modèle de fonction membre définition (en plus de la déclaration) devrait se trouver dans le fichier d'en-tête, et non dans le cpp, bien qu'il le fasse. pas doivent être dans le corps de la déclaration de la classe elle-même.

79voto

none Points 4574

Voir ici : Modèles , méthodes de modèle , Modèles pour les membres , Modèles de fonctions des membres

class   Vector
{
  int     array[3];

  template <class TVECTOR2> 
  void  eqAdd(TVECTOR2 v2);
};

template <class TVECTOR2>
void    Vector::eqAdd(TVECTOR2 a2)
{
  for (int i(0); i < 3; ++i) array[i] += a2[i];
}

24voto

Tobias Points 3120

Oui, les fonctions de membre de modèle sont parfaitement légales et utiles en de nombreuses occasions.

La seule réserve est que les fonctions membres des modèles ne peuvent pas être virtuelles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X