IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

les classes templates


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut les classes templates
    Salut a tous
    Voila j'etais entrain de lire des tutos sur les templates
    le probléme je vois pas a quoi vont servire les classes ou les fonctions templates

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    A beaucoup de choses. Principalement à avoir du code qui s'adapte aux structures de données de son utilisateur final. Exemple bâteau : Tu veux mettre en place une classe de type liste chaînée. Ce qui est important à ce niveau, c'est la structure de la liste elle même. Ce qui sera dedans, peu importe. Pour parvenir à dire ce "peu importe" dans du code, il y a plusieurs solutions :

    - Toutes les variétés de ce "peu importe" dériveront d'une classe de base, ou bien sera connu uniquement sous forme de pointeur void*. Outre le coût, cette solution demande à l'utilisateur de cette liste de passer outre le système de type, ce qui rend le code dangereux. C'est comme ça que faisaient Java ou C# dans leurs premières versions, ils sont revenus en arrière pour mettre en place un truc apparenté au templates.

    - On fait tout par macro. Je crois que certains faisaient ainsi avant les templates en C++. Je n'ai heureusement jamais connu cette époque de martyrs.

    - On fait une liste par type d'objet que l'on veut mettre dedans, par copier/coller/remplacer/adapter à partir d'une liste de base (c'est comme ça que font certains en C#1.0, peut-être aussi en vieux Java...).

    - On fait par templates, qui sont de ce point de vue une façon d'automatiser le copier/coller/remplacer/adapter. Sachant que ce qui était nécessaire pour faire marcher le "adapter" permet d'aller bien plus loin que ce que les designers des templates avaient prévu. Mais c'est une autre histoire...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    J'ajouterais à cela :
    http://alp.developpez.com/tutoriels/traitspolicies/
    http://alp.developpez.com/tutoriels/templaterebinding/
    http://loulou.developpez.com/tutoriels/cpp/metaprog

    Et de nombreux sujets sur le forum

    Un point important qui n'est pas connu d'assez de monde, c'est que les templates permettent une forme de polymorphisme statique... Un polymorphisme qui est utilisé à la compilation, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    template <class Animal>
    class GestionAnimal
    {
      public :
        void faireBruit()
        {
           Animal::bruit();
        }
    };
     
    class Chien
    {
      static void bruit()
      {
        std::cout << "Ouaf ouaf" << std::endl;
      }
    };
     
    class Chat
    {
      static void bruit()
      {
        std::cout << "Miaou miaou" << std::endl;
      }
    };
     
    // ...
     
    GestionAnimal<Chien> gc;
    gc.faireBruit(); // affiche "Ouaf ouaf"
     
    GestionAnimal<Chat> gc2;
    gc.faireBruit(); // affiche "Miaou miaou"
    Tu peux en savoir plus sur ce genre d'utilisation des templates en lisant le premier lien que je t'ai donné ainsi qu'en faisant une recherche sur "templates" et/ou "polymorphisme statique" et/ou "politique", dans le forum C++.

    Voilà

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut
    Merci infiniment Alp mais je pense qu'il une petite erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Compiling...
    template1.cpp
    C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(17) : error C2248: 'bruit' : cannot access private member declared in class 'Chien'
            C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(23) : see declaration of 'bruit'
            C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(16) : while compiling class-template member function 'void __thiscall GestionAnimal<class Chien>::faireBruit(void)'
    Error executing cl.exe.

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    remplace par .
    De même pour Chat
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Effectivement, David a raison, j'ai écrit trop vite
    Le soucis est que l'accessibilité est privée par défaut dans les classes, publique dans les structures.

Discussions similaires

  1. xml_iarchive cassé pour les classes template ?
    Par koala01 dans le forum Boost
    Réponses: 4
    Dernier message: 02/08/2011, 15h40
  2. Question sur les classes template
    Par Djobird dans le forum C++
    Réponses: 2
    Dernier message: 17/10/2010, 20h05
  3. les classes et les templates dans les plugins
    Par asoka13 dans le forum C++
    Réponses: 22
    Dernier message: 24/01/2008, 17h11
  4. Réponses: 13
    Dernier message: 29/09/2006, 16h10
  5. Réponses: 31
    Dernier message: 30/03/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo