Partage
  • Partager sur Facebook
  • Partager sur Twitter

Séparer prototype et définition avec template

Sujet résolu
    1 novembre 2018 à 17:45:02

    Bonjour, j'avais une question simple:

    Dans une classe "classique" on a prit l'habitude de séparer les prototypes:

    fichier.h
    
    class A {
    public:
        A()
        void f1();
    private:
        ...
    }



    des définitions :

    fichier.cpp
    
    A::A()
    {
       ...
    }
    
    void A::f1()
    {
       ...
    }

    Mais quand on utilise des templates pour la classe est on vraiment obligé de tout mettre dans le header ? ca veut dire que le .cpp est vide alors ?

    • Partager sur Facebook
    • Partager sur Twitter
      1 novembre 2018 à 18:21:49

      Pour comprendre, il faut une petite précision. En anglais, le mot template signifie modèle. Une classe template n'est pas du code, c'est un modèle de code que le compilateur va utiliser pour générer le code correspondant à l'instanciation du modèle. Or il ne peut le faire sans le détail du modèle, c'est la raison pour laquelle il n'y a qu'un fichier d'en tête et pas de fichier sources pour les templates.

      Si tu tiens absolument à séparer tu peux quand même le faire dans un fichier que tu vas inclure dans l'en-tête, mais ça n'a quasiment aucun intérêt:

      #ifndef A_HEADER_INCLUDED
      #define A_HEADER_INCLUDED
      
      template<class T>
      class A
      {
      
      public:
      
          A(T const & t);
      };
      
      #include"a.tpp"
      
      #endif // A_HEADER_INCLUDED

      Et le fichier a.tpp

      template<class T>
      A<T>::A(T const & t)
      {
         // ...
      }



      • Partager sur Facebook
      • Partager sur Twitter
      Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

      Séparer prototype et définition avec template

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown