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 :

Répétition des paramètres templates d'une classe dans le prototype des constructeur et opérateurs ?


Sujet :

Langage C++

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut Répétition des paramètres templates d'une classe dans le prototype des constructeur et opérateurs ?
    Bonjour,

    Je lis un article où l'auteur décrit une classe template pour faire du calcul en virgule fixe.

    Je suis surpris de voir du code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<typename B, unsigned char I, unsigned char F>
    class fixed_point
    {
    public:
        fixed_point(fixed_point<B, I, F> const& rhs) : value_(rhs.value_) 
        { }
    };
    Pourquoi utiliser fixed_point<B, I, F> au lieu de fixed_point dans le prototype ?

    Merci d'avance !

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ici, aucun intérêt. C'est au mieux inutilement explicite, au pire pédant.

    Au sein des instanciations de template<typename B, unsigned char I, unsigned char F> class fixed_point, l'identifiant fixed_point désigne fixed_point<B, I, F>. C'est à cet effet que l'injected class-name a été inventée :

    [class]/2

    A class-name is inserted into the scope in which it is declared immediately after the class-name is seen.
    The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name.
    For purposes of access checking, the injected-class-name is treated as if it were a public member name.
    Cela nous permet d'écrire du code bien plus lisible. L'usage du nom complet ici peut porter à confusion et être interprété par le lecteur pressé comme un rebind (l’interaction d'une instanciation avec une autre).
    -- Yankel Scialom

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Un petit coup d'oeuil sur la date de cet article nous indique qu'il date de ... 2009.

    Sans chercher à défendre d'une quelconque manière les pratiques de l'auteur, il est possible que leur justification tienne en quelque mots: le compilateur utilisé à l'époque.

    Si l'on se remet dans le contexte de l'époque, il faut en effet se souvenir que le compilateur de VisualStudio (pour ne citer que lui, on parle de VC++2005, au mieux) avait quelques soucis avec les template, et que cette simple raison a pu inciter l'auteur à utiliser cette pratique.

    A vrai dire, je ne vois pas vraiment d'autres raisons de l'avoir fait que de "contourner un problème" posé par le compilateur
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Merci pour vos réponses ! Il me semblait que ce n'était pas utile mais je me demandais si ça ne pouvait pas servir à "mixer" différentes instanciations du template. Ce n'est donc pas le cas !

    La suggestion de koala1 sur le compilateur est très possible quand on voit des choses comme ceci dans le code complet :
    Paul Dixon helped in making the class compatible with gcc.
    ...
    /// Make gcc happy.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2016, 18h48
  2. Réponses: 0
    Dernier message: 17/04/2012, 10h38
  3. Réponses: 11
    Dernier message: 29/05/2008, 16h26
  4. Réponses: 8
    Dernier message: 16/02/2007, 15h55
  5. Réponses: 1
    Dernier message: 18/04/2006, 12h24

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