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 :

Virtual et Template : éclairez-moi !


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Virtual et Template : éclairez-moi !
    Bonjour tout le monde !
    J'ai un classe qui contient des méthodes "protected" déclarées ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      virtual Void F1( UChar *p1, UChar *p2, int n);
    ...
    void F1( short *p1, short *p2, int n);
    Ma question est que j'aimerais spécialiser la fonction F1 en fonction d'un paramètre (ici, n) et j'ai pensé aux templates, évidemment.
    Ceci dit, le virtual me pose problème !

    Comment faire ?
    Merci d'avance !

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Ce n'est pas possible de faire des fonctions membres à la fois virtuelle et template. C'est con mais c'est comme ça.

    Voici 2 suggestions qui peuvent peut-être te convenir:

    - une classe template avec des fonctions virtuelles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class T>
    struct A
    {
      virtual void f() const;
    };
    -une fonction template globale "virtuelle":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct A { virtual void f() const; };
    template<class T> f(const A &a, T x) { ... a.f(); ... }

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    C'est con effectivement !
    Eh bien, merci de ta réponse, ça m'évite de me prendre la tête à essayer de comprendre ce qui ne va pas .

  4. #4
    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
    C'est con, mais ça peut se comprendre. Pour implémenter le mécanisme de fonctions virtuelle, on crée généralement un tableau contenant des pointeurs vers toutes celles-ci. Si cette fonction est un template, il y a potentiellement un nombre infini de fonctions virtuelles dans la classe, et le nombre dépend des utilisateurs de celle-ci. Comment donc construire un tel tableau ?
    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.

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK, et puis finalement, en creusant, le virtual est superflu ! .
    Mais j'aurais au moins compris quelque chose .

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par progfou
    OK, et puis finalement, en creusant, le virtual est superflu ! .
    Mais j'aurais au moins compris quelque chose .
    Sans le virtual, la liaison sera statique et non pas dynamique. Si des personnes héritent plus tard (même beaucoup plus tard) de tes classes, le fait de trouver des fonctions non virtuelles qu'ils auraient bien aimés réimplanter est dommageable...
    Evidemment, la liaison statique est toujours au moins aussi rapide que la liaison dynamique!

    J'aurai tendance à dire que, moins il y a de virtual, plus le programme s'éloigne de l'orienté objet "pur"...
    Dans Java, la liaison est toujours dynamique, au risque c'est vrai, de perde un peu en rapidité.

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

Discussions similaires

  1. pure virtual method et templated return type
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 21/08/2014, 12h57
  2. HyperV / VirtualBox éclairez moi svp
    Par Invité dans le forum Virtualisation
    Réponses: 3
    Dernier message: 23/09/2013, 23h08
  3. héritage template virtual destructeur
    Par ziker dans le forum Langage
    Réponses: 7
    Dernier message: 26/11/2011, 20h27
  4. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 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