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 :

Parametre template et typedef d'une base


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut Parametre template et typedef d'une base
    Bonjour,

    je me trouve confronté à un problème que je n'attendais pas. Il se trouve qu'un typedef d'une base entre en conflit avec un paramètre template d'une dérivée.

    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
    class Base
    {
      public:
        typedef int Type;
    };
     
    template<typename Type> 
    class Derivee : public Base
    {
      public: 
        // Fait référence à Base::Type, et non pas au paramètre template !!?
        Type m_a;
    }; 
     
    int main()
    {
      Derivee<int*> d;
      int* p;
      d.m_a = p;
      return 0;
    }
    Dans mon cas, pas de soucis, je change le nom du parametre template, mais l'erreur est assez imprévisible et pas évidente à détecter (faut le savoir).

    Comment faites-vous pour palier à ça ? Utilisez-vous des pre/suffixes explicites pour vos paramètres templates de façon à ne pas avoir de mauvaise surprises ?

    Un changement de priorité est-il prévu dans la prochaine norme pour d'abord essayer de résoudre le nom des paramètres templates, puis chercher dans les typedefs des bases ?

    merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Erreur, mon message n'était valable que si la classe de base est aussi une classe template.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par NiamorH Voir le message
    Comment faites-vous pour palier à ça ? Utilisez-vous des pre/suffixes explicites pour vos paramètres templates de façon à ne pas avoir de mauvaise surprises ?
    En general mes parametres template s'appellent betement T (ou R ou T1, T2, ..) du coup je n'ai jamais eu le probleme...

    MAT.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    A part mettre Base::Type, je ne vois rien.

    Citation Envoyé par Mat007 Voir le message
    En general mes parametres template s'appellent betement T (ou R ou T1, T2, ..) du coup je n'ai jamais eu le probleme...
    De même pour moi. Soit ce genre de noms, soit des noms très explicites à la Loki (par endroits).

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Une façon très simple d'éviter cela c'est de ne pas mettre la première lettre d'un typedef interne à une classe en majuscule.

Discussions similaires

  1. Typedef dans une classe mère template
    Par Mat007 dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2009, 10h50
  2. Réponses: 1
    Dernier message: 19/01/2009, 19h05
  3. Typedefs dans une classe template
    Par olivier1978 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 01h12
  4. typedef dans une class template
    Par yan dans le forum Langage
    Réponses: 2
    Dernier message: 01/10/2007, 10h43
  5. Passer en parametre le nom d'une base
    Par nanmi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/02/2007, 13h09

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