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

Langage C++ Discussion :

virtualité méthode template de classe


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut virtualité méthode template de classe
    Bonjour
    Je suis curieux de savoir s'il existe un compilateur (basé sur une norme c++ récente ex C++11) qui accepterait un polymorphisme sur une méthode template de classe. Voici un 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
     
    #include<iostream>
     
    struct A
    {
    virtual template<int n> int f(){ return n; }
    };
     
    struct B: public A
    {
    virtual template<int n> int f(){ return n+1; }
    };
     
    struct C: public A
    {
    virtual template<int n> int f(){ return n+2; }
    };
     
    int main()
    {
    A *a = new A;
    A *b = new B; 
    std::cout <<"B:"<< b->f<2>() <<endl;
    std::cout <<"A:"<< a->f<2>() <<endl;
    };
    A l'écran, on verrait afficher "B:3" et "A:2"

    Il faudrait que l'analyse de la "templetude de F" de A entraine la génération de code de toutes les fonctions f de toutes ses classes filles pour le même argument.

    Ainsi on pourrait imaginer que
    - dés le compilateur voit "A *", il se prépare à générer le code des f pour les classes A , B et C.
    - puis dés qu'il voit ->f<2>, il exécute la génération de f<2> pour les 3 classes même s'il n'existe aucune instance de C.

    Merci

  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 : 50
    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
    Par défaut
    Non, et il n'y a rien de prévu de ce genre (ce ne serait pas aisé, car actuellement, on peut manipuler des A sans même savoir que C existe, c'est important pour la compilation séparée).

    Je me demande quel est ton vrai besoin derrière cette demande. Par exemple, dans le cas que tu as montré, ou peut y arriver en découpant autrement :
    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
    struct A
    {
      template<int n> int f(){ return n+ecart(); }
      virtual int ecart() {return 0;}
    };
     
    struct B: public A
    {
      int ecart() override { return 1; }
    };
     
    struct C: public A
    {
      int ecart() override { return 2; }
    };
    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
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Merci pour la réponse même si elle n'est pas positive. Le code en soit n'a aucun intérêt C'est juste un toy model.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/04/2010, 11h15
  2. Réponses: 19
    Dernier message: 23/12/2009, 19h22
  3. Définition de méthodes pour une classe template
    Par Pragmateek dans le forum Langage
    Réponses: 13
    Dernier message: 20/12/2008, 00h46
  4. Spécialisation de méthode membre de classe template
    Par Zbouirf dans le forum Langage
    Réponses: 3
    Dernier message: 23/07/2008, 02h30
  5. Méthode template dans classe non template ?
    Par shenron666 dans le forum Langage
    Réponses: 12
    Dernier message: 04/09/2006, 17h50

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