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 :

code incomprehensible (3 lignes) : template, typename


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut code incomprehensible (3 lignes) : template, typename
    Bonjour,

    Moi qui suis programmeur JAVA adepte de la conception OO et de la documentation je me trouve en train de relire un code C++ pas documente. Vous imaginez mon desarroi.
    Mon premier probleme concerne ces trois lignes : ou est le type de retour de la fonction ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class T> 
    typename T::_ptr_type 
    resolve_name( /*parametres*/) {
    // corps de la fonction
    }
    Y a-t-il une maniere plus developpee de dire la meme chose ?

    Merci !
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Bon...

    template<class T> ca ca veux dire que ta fonction vas etre générique et utilisé un objet non identifié dont on dira qu'il est de type T

    typename T::_ptr_type Ca ca permet de dire que dans ton objet de type T il y a un typedef qui a été définit et que ce typedef s'apelle _ptr_type

    resolve_name( )
    {
    }

    Ca c'est ta fonction...

    En gros ta fonction retourne un typedef nommé _ptr_type définit dans une classe non définit de type T... c'est tout de meme vachement tirer par les cheveux a mon gout mais bon...

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    C'est ce dont je me doutais, mais j'ai alors des questions :
    - le typename est-il necessaire ?
    - que se passe-t-il si on passe en template un type qui ne contient pas de _ptr_type ?
    - n'y a-t-il pas moyen de contraindre T a deriver d'une classe contenant _ptr_type (par polymorphisme) ? Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MaClasse {
     
        typedef Machin _ptr_type;
     
    }
     
    template <MaClasse T>             //on force T a descendre de MaClasse
    typename MaClasse::_ptr_type
    resolve-name(...
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 36
    Par défaut
    - le typename est-il necessaire ?
    oui

    - que se passe-t-il si on passe en template un type qui ne contient pas de _ptr_type ?
    les templates sont instancie a la compilation, donc tu aurai une erreur de compilation

    - n'y a-t-il pas moyen de contraindre T a deriver d'une classe contenant _ptr_type (par polymorphisme) ?
    non

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Merci, je comprends mieux !
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par dok3
    - n'y a-t-il pas moyen de contraindre T a deriver d'une classe contenant _ptr_type (par polymorphisme) ?
    non
    disons pas de manière explicite, car le fait d'utiliser _ptr_type contraint à utiliser une classe qui dispose de ce type. C'est le genre de choses à mettre en commentaires.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Les templates ne sont pas complètement orientés interface (si on compare à Java), mais plus implémentation.
    On pourrait avec de la méta-programmation utiliser des assertions statiques qui nous forcent à utiliser un T qui dériverait d'un TI -- voir boost ou Loki.

    Seulement, ce n'est pas vraiment dans l'esprit des templates en C++. On va plus souvent s'en sortir en ayant des classes qui vont devoir fournir des types internes (comme ici), ou même accepter n'importe qu'elle classe pour laquelle on fournira un adaptateur (-> structures de traits). Ainsi, avec une bibliothèque de sérialisation, on pourra sérialiser n'importe quel type de contaneusr, même ceux dont on ne maitrise pas l'interface "membre" ; p.ex. on règlera la bibliothèques via une structure de trait spécialisée pour les divers conteneurs / types à sérialiser.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Dans C++ CLI, les generics diposent du mot-clé where qui permet de spécifier le type de T.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    interface class Toto
    {
    };
    generic<typename T>
    where T:Toto
    ref class Test
    {
    };

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

Discussions similaires

  1. ligne de code incomprehensible
    Par flb-iori dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2007, 01h30
  2. Réponses: 7
    Dernier message: 01/08/2006, 11h58
  3. [Débutant] template <typename T> et main()
    Par reggae dans le forum Langage
    Réponses: 6
    Dernier message: 22/10/2005, 18h57
  4. [delphi 7] Code incomprehensible
    Par bartoumi dans le forum Débuter
    Réponses: 3
    Dernier message: 12/10/2005, 12h43
  5. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 16h03

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