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 :

Méthode template : déclaration/définition et appel ?


Sujet :

Langage C++

  1. #1
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut Méthode template : déclaration/définition et appel ?
    Bonjour,

    Je suis en train de coder une bibliothèque s'occupant du registre Windows, afin de l'utiliser dans mon projet en cours. J'ai donc pensé à créer tout d'abord une classe template "Key" (puisque les clés peuvent être de n'importe quel type), définie de la manière suivante :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    template < typename T >
        class Key
        {
            public:
                typedef typename T Type;
     
                explicit Option(const std::string&);
                ~Option();
     
                Type get(void) const;
                void set(Type);
     
            private:
                HKEY m_key;
        };
    Conséquemment, j'ai créé par la suite une méthode à ma classe "Registry", permettant de récupérer un pointeur de Key, récupérée à partir du "chemin" courant et du nom de la clé, passé en paramètre à la méthode.

    Et c'est là que le problème arrive : comment déclarer et définir cette méthode (getKey()), pour préserver le caracètre "template" de la classe Key ?

    J'ai bien pensé à cela :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Registry
    {
         //...
         template < typename T >
                Key < typename T > *getKey (const std::string&) const;
         //...
    };
     
    //Et donc sa définition :
    template < typename T >
           Key < typename T > *Registry::getKey (const std::string &keyName) const
    {
         //...
    }
    Mais bien évidemment, je ne suis sûr de rien.

    A ce moment là, comment appelerait-on la méthode dans le code ?

    Serait-ce :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    Key < bool > *booleanKey = reg.getKey < bool >("Boolean");
    ?

    Merci d'avance.

    P.S: Tout conseil, concernant le code, est le bienvenu, bien évidemment

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Salut

    - Ta classe Key a un constructeur et un destructeur nommés Option
    - La déclaration de ta fonction template doit être comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template < typename T >
                Key<T> *getKey (const std::string&) const;
    - Pour l'appel c'est bon, tu as la bonne syntaxe.

  3. #3
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Effectivement, j'ai oublié de renommer en conséquence

    Merci, en tout cas.

    Néanmoins : en ce cas, pourquoi utilisons-nous des "typedef typename T Type;", si par la suite "T" est suffisant dans la déclaration ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par kidpaddle2
    Néanmoins : en ce cas, pourquoi utilisons-nous des "typedef typename T Type;", si par la suite "T" est suffisant dans la déclaration ?
    Ca permert de récupérer le type plus tard dans une autre classe.
    Par exemple une matrice qui utilise un type particulier, pour accéder à ce type, il faut utiliser un typedef - sans typename dans ce cas -

Discussions similaires

  1. Appel d'une méthode dans sa définition même,
    Par jaccques dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/11/2010, 22h16
  2. Réponses: 4
    Dernier message: 22/11/2010, 14h15
  3. Méthode template dans classe non template ?
    Par shenron666 dans le forum Langage
    Réponses: 12
    Dernier message: 04/09/2006, 17h50
  4. Appeler une méthode template d'un paramètre template
    Par YéTeeh dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2006, 12h50
  5. Méthode template virtuelle
    Par ced1 dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2005, 15h14

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