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 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 483
    Points : 13 685
    Points
    13 685
    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).

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 483
    Points : 13 685
    Points
    13 685
    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